在多個(大)鏈接列表中查找重複的最快方法是什麼? 我會試着用數組說明這個問題,而不是爲了讓它更具可讀性。 (爲了簡單起見,我使用了0-9的數字而不是指針)。在多個鏈接列表中查找重複的算法
list1[] = {1,2,3,4,5,6,7,8,9,0};
list2[] = {0,2,3,4,5,6,7,8,9,1};
list3[] = {4,5,6,7,8,9,0,1,2,3};
list4[] = {8,2,5};
list5[] = {1,1,2,2,3,3,4,4,5,5};
如果我現在問: '不數8 list1-5存在嗎?'我可以對列表進行排序,刪除重複項,對所有列表重複此操作並將它們合併到「超級列表」中,查看(新)重複項的數量是否等於我搜索的列表數。假設我得到了正確的重複數目,我可以假設我搜索的內容(8)存在於所有列表中。 如果我改爲搜索1,我只會得到4個副本— ergo未在所有列表中找到。
是否有更快/更聰明/更好的方式來實現上述不以任何方式排序和/或更改列表?
P.S .:這個問題主要是出於純粹的好奇心而沒有別的! :)
爲什麼你不只是遍歷所有列表和搜索8的而不是排序/刪除重複的故事嗎? – Klark 2011-05-09 22:13:36
@Klark我認爲他知道任何一個查詢的成本是O(n),使用那個平凡的算法,並且想要分攤多個查詢的成本。 @Waxhead我認爲你最好通過將它放置在樹,散列表或計數布隆過濾器中來重新表示數據。 – 2011-05-10 19:05:23