【发布时间】:2013-03-13 14:14:27
【问题描述】:
我有两个输入数组 X 和 Y。我想返回数组 X 中在数组 Y 中出现频率最高的那个元素。
这样做的简单方法要求对于数组 X 的每个元素 x,我线性搜索数组 Y 的出现次数,然后返回具有最高频率的元素 x。这是伪算法:
max_frequency = 0
max_x = -1 // -1 indicates no element found
For each x in X
frequency = 0
For each y in Y
if y == x
frequency++
End For
If frequency > max_frequency
max_frequency = frequency
max_x = x
End If
End For
return max_x
由于有两个嵌套循环,该算法的时间复杂度为 O(n^2)。我可以在 O(nlogn) 或更快的时间内做到这一点吗?
【问题讨论】:
-
在讨论具有两个或多个维度的问题时,通常最好使用每个维度的变量来讨论复杂性。由于
X < Y,我们可以取Y = N并得到二次复杂度。实际上,O(X * Y)可以更好地说明实际工作量。
标签: algorithm sorting search complexity-theory