簡體   English   中英

如何使用時間復雜度優於O(n ^ 2)的STL向量和STL算法進行左連接?

[英]How to do a left join with STL vector and STL algorithms with time complexity better than O(n^2)?

我有2個向量,包含,讓我們說Person(姓名,姓氏等)對象。 我想取一個向量(讓它命名為“大”)然后對於這個向量中的每個元素在第二個中找到對應的元素(“小”)並將一些數據從“小”向量元素合並到“大”向量元件。 此操作與SQL術語中的左連接非常相似,但具有額外的數據合並。 最簡單的方法是進行2個循環,但這將導致O(n ^ 2)時間復雜度。 我可以用STL算法做得更好嗎?

如果小向量進行排序 ,則可以通過掃描大向量獲取合並部分的O(n log n),並使用binary_search查找小向量中的元素。

是! 您可以在O(nlogn)時間復雜度中執行此操作。 對第二個向量進行排序,需要O(nlogn)時間。 對於第一個向量中的每個元素,使用二分搜索(STL具有binary_search算法)在第二個元素中找到對應的元素,並將數據合並到第一個向量中的元素。 對於第一個向量中的每個元素,我們花費O(logn)時間。 因此,這種方法的運行時間復雜度為O(nlogn)。

如果您的列表不經常更改,您可以對兩個列表進行排序,然后通過簡單地遍歷兩個列表以線性時間進行合並。

如果您的列表一直在變化,那么您可能最好將“小”容器排序,例如mapset 在這種情況下,只需對要加入的大列表中的每個項目使用find

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM