【发布时间】:2011-08-22 00:35:41
【问题描述】:
在多个(大型)链表中查找重复项的最快方法是什么。 我将尝试用数组来说明这个问题,而不是让它更具可读性。 (为了简单起见,我使用了 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};
如果我现在问:“列表 1-5 中是否存在数字 8?”我可以对列表进行排序,删除重复项,对所有列表重复此操作并将它们合并到“超级列表”中,然后查看(新)重复项的数量是否等于我搜索的列表数量。假设我得到了正确数量的重复项,我可以假设我搜索的 (8) 存在于所有列表中。 如果我改为搜索 1,我只会得到四个重复项——因此在所有列表中都找不到。
是否有更快/更智能/更好的方法来实现上述目标,而无需以任何方式排序和/或更改列表?
P.S.:问这个问题主要是出于好奇,没有别的! :)
【问题讨论】:
-
为什么不遍历所有列表并搜索 8 而不是排序/删除重复的故事?
-
@Klark 我认为他知道任何一个查询的成本都是 O(n),使用这种简单的算法,并希望在多个查询中分摊成本。 @Waxhead 我认为您最好通过将数据放在树、哈希表或计数布隆过滤器中来重新表示数据。
标签: algorithm optimization linked-list