两个字符串列表的交集
问题内容:
我有以下几条面试问题:
给定两个无序客户列表,返回两个列表的交集的列表。也就是说,返回出现在两个列表中的客户列表。
我建立的一些东西:
- 假设每个客户都有一个唯一的名称
- 如果两个列表中的名称相同,则是同一位客户
- 名称的形式为名字,姓氏
- 没有II,Jr,奇怪字符等的诡计。
我认为关键是要找到一种有效的算法/使用数据结构来尽可能高效地做到这一点。
我的进度是这样的:
- 将一个列表读到内存中,然后一次读取另一个列表,以查看是否有匹配项
- 按字母顺序排列两个列表,然后从一个列表的顶部开始,查看每个项目是否出现在另一列表中
- 将两个列表都放入有序列表,然后使用较短的列表逐项检查(这样,一个列表有2个项目,您只需检查这2个项目)
- 将一个列表放入哈希中,然后检查另一个列表中是否存在键
面试官一直问:“下一步呢?”,所以我想我还缺少其他东西。
还有其他技巧可以有效地做到这一点吗?
旁注,这个问题在python中,而我只是读到about sets
,它似乎尽可能有效地做到了这一点。知道什么是数据结构/算法sets
吗?
问题答案:
- 将一个列表放入Bloom过滤器中,然后使用它过滤第二个列表。
- 将已过滤的第二个列表放入Bloom过滤器中,并使用该过滤器过滤第一个列表。
- 对两个列表进行排序,并通过上述方法之一找到交点。
这种方法的好处(除了允许您在采访中正确使用半模糊数据结构外)是,在您(很有可能)减小问题的大小之前,不需要任何O(n)存储。
面试官一直问:“下一步呢?”,所以我想我还缺少其他东西。
也许他们会一直问这个问题,直到您用尽答案为止。
http://code.google.com/p/python-bloom-
filter/
是Bloom过滤器的python实现。