【问题标题】:Pick optimal combination from matrix从矩阵中选择最优组合
【发布时间】:2021-03-06 11:38:19
【问题描述】:

假设我有一个矩阵 M,它看起来像:

[a b c l]

[d e f k]

[g h i o]

我必须从每一列中选择一个元素,这样我才能最小化所有这些元素的最大值。

例如。如果我选择 a,e,i,k 我的答案将是 max(a,e,i,k)

要找到最优解,有没有比O(n^3)更好的方法?

如果可能的话,我会很感激某种伪代码/sn-p 代码。

【问题讨论】:

  • 取每一列的最小元素怎么样?这将有 O(w*h) 矩阵的 w=width 和 h=height。
  • 这可能不一定最终成为最佳解决方案,因为第二个参数每列只有一个元素。这不是一个贪婪的问题。
  • 我的解决方案确实最大限度地减少了可能的项目选择。可能有一个时间复杂度更高但结果是最佳的(或者我正在监督一些重要的事情)。
  • 假设 a 是第 1 行的最低值元素,g 是第 3 行的最低值元素。您的方法总是选择 a,这可能不是最好的方法,因为 g 会被忽略。如果 g 低于 a,则它变得相关。
  • 意外地,我最初在第一条评论中写了“每行的最小元素”,但我将其更正为“列”。所以在我的方法中,这些行实际上并不重要。

标签: python matrix dynamic-programming


【解决方案1】:

选择每列的最小值并计算其中的最大值 (M)。尽管会有其他组合产生相同的最大值,但 M 不能进一步减小,因为 M 列中的任何值都会更大,并且在其他列中选取(较小)值不会改变 M,而 M 是其自身列中的最小值。

如果您希望最小化这些值的总和,则需要进行一些额外的优化,可能使用动态规划。事实上,问题很简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多