在每列中找到最小值的最快方法

时间:2015-12-03 11:03:18

标签: algorithm matrix time-complexity complexity-theory minimum

我有log n行,每行包含n个数字。

我希望找到所有行中每个位置的最小值:

[1, 2, 3, 4, 5, 6, 7, 8]
[2, 3, 4, 1, 2, 3, 4, 5]
[3, 6, 7, 8, 3, 4, 1, 2]
[9, 7, 2, 3, 2, 1, 3, 1]

应该会产生如下所示的数组:

[1, 2, 2, 1, 2, 1, 1, 1]

我很容易在O(nlogn)时间

制作蛮力方法

我甚至可以看到一个分而治之的解决方案,它将行分成两半并在每一侧递归运行算法,这需要花费O(nloglogn)时间。

但是我找不到删除n的方法。我看到它的方式,我需要至少在一行中查看每个位置至少一次。

有没有办法让复杂性更小?

1 个答案:

答案 0 :(得分:3)

如果X大小的数组没有以某种已知的特殊方式排序或结构化,那么在其中查找元素y的成本必须等于X,因为你不能跳过X中的任何元素(跳过的元素)可以是解决方案)。

搜索顺序也无关紧要。如果你拆分它并分而治之等,那么元素y仍然是你访问的最后一个元素。

因此,如果您有一个大小为n*logn的数组,则可能的最低复杂度为Omega(n* log n)