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

Fastest way to find minimum value in each column

我有 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 的方法。在我看来,我需要至少查看其中一行中的每个位置至少一次。

有没有办法让复杂度变小?

如果大小为 X 的数组未按某种已知的特殊方式排序或构造,则在其中查找元素 y 的成本必须等于 X,因为您不能跳过 X 中的任何元素(跳过一个可能是解决方案)。

搜索的顺序也没有关系。如果你拆分它并分而治之等,元素 y 仍然可以是你访问的最后一个。

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