在多个(大)链接列表中查找重复的最快方法是什么? 我会试着用数组说明这个问题,而不是为了让它更具可读性。 (为了简单起见,我使用了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