[英]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)。
如果您的列表不經常更改,您可以對兩個列表進行排序,然后通過簡單地遍歷兩個列表以線性時間進行合並。
如果您的列表一直在變化,那么您可能最好將“小”容器排序,例如map
或set
。 在這種情況下,只需對要加入的大列表中的每個項目使用find
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.