【发布时间】:2016-03-07 23:11:32
【问题描述】:
我有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 的方法。在我看来,我需要至少查看其中一行中的每个位置至少一次。
有没有办法让复杂度变小?
【问题讨论】:
-
矩阵中的数字之间有关系吗?
-
你能告诉你 O(n loglog n) 解决方案的方法吗?
-
图中节点之间有距离,这意味着数字有上限,除此之外,没有。
-
对于具有随机值的数组,如果不遍历整个数组一次,就无法找到最小值,至少(因为下一个元素总是小于当前最小值)。我认为除了访问所有元素之外没有其他解决方案。
-
将一个问题分成两半,然后对每一半运行一个算法不会给你一个日志。如果你能消除其中的一半,你就会有一个案例。
标签: algorithm matrix time-complexity complexity-theory minimum