鑑於兩個陣列具有如下結構:蟒合併未分類的清單 - 算法分析
array = [(index_1, item_1), (index_2, item_2), ..., (index_n, item_n)]
陣列中的項目可以是未orderd內部,例如兩個Python列表:
arr1 = [(1,'A'), (2, 'B'), (3,'C')]
arr2 = [(3,'c'), (2, 'b'), (1,'a')]
我想分析這些數組的合併。有兩種方法我可以考慮進行合併。第一個是兩個 陣列在天真迭代:
merged = []
for item in arr:
for item2 in arr2:
if item[0] == item2[0]:
merged.append((item[0], item[1], item2[1]))
# merged
# [(1, 'A', 'a'), (2, 'B', 'b'), (3, 'C', 'c')]
這種幼稚的做法是在大澳爲O(n ** 2),
一個稍微好一點的方法是(?)排序列第一(與Python的排序是爲O(n log n)的):
arr.sort(key=lambda t: t[0])
arr2.sort(key=lambda t: t[0])
for idx, item in enumerate(arrs):
merged_s.append(tuple(list(item)+[arr2s[idx][1]]))
所以這種方法會爲O總數(N log n)的,是這個分析是正確的?
如果列表的長度不相等,那麼情況如何?m
和n
?
有沒有一種更有效的方法,然後再排序呢?
如果物品丟失,應該輸出什麼內容? – thefourtheye
你是說兩個數組的長度總是一樣嗎? – Shrey
'元組(list(item)+ [arr2s [idx] [1]])'可以是'item + arr2s [idx] [1:]'。由於元組的切片是元組,並且'+'連接元組就像列表一樣。 –