这是我的一项任务的问题。
给定四个N名称列表,设计一个线性算法来确定是否有任何四个列表共有的名称。
最接近满足O(n log n)的解决方案,只有在只有两个数据集的情况下才有效。迭代其中一个集合并使用二进制搜索来查找匹配项。
有关如何解决此问题的任何提示?我首先在programmers.stackexchange上发布了这个,但是大多数回复都将linearithmic误认为是线性的。
答案 0 :(得分:3)
您建议的算法可以扩展为使用任何(常量)列表:
这需要与解决方案相同的时间量乘以常量(列表数)。所以它仍然是O(n * log n)。
请注意,通过使用哈希表而不是排序+二进制搜索,也可以获得O(n)平均大小写运行时。
答案 1 :(得分:0)
在O(N.Log(N))中对所有四个列表进行排序。
然后依次选择四个列表中最小的一个(这需要每个元素进行一个恒定的比较),直到所有列表都用完为止,在O(N)中。如果是关系,您将在具有相同值的所有列表中前进(报告四联)。