【问题标题】:Fastest way to find minimum value in each column在每列中找到最小值的最快方法
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多