【问题标题】:maximise the special elements in the matrix最大化矩阵中的特殊元素
【发布时间】:2013-08-23 16:53:48
【问题描述】:

以下是问题陈述:

有一个大小为 m*n 的矩阵从 1 到 m*n 的所有数字都在其中占据一个位置。现在,一个元素被称为特殊if(递归定义)

-it is the top left corner element(at position (0,0)) 
-an element at (x,y) is special if its neighbour is an element (m,n) such that (m,n) is    
 special and the element at (x,y) is greater than the element at(m,n) and all of the (m,n)'s neighbours.

一个小区的邻居是与它共享一条边的小区。因此,内部单元有 4 个邻居,边缘单元有 3 个邻居,角单元有 2 个邻居。

问题表明矩阵中只有少数(可能是 0)个单元格已被填充。 其余部分的填充方式是使用从 1 到 m*n 的所有数字,并且我们最大化特殊元素的数量。此外,如果可能有多个答案,则字典最小矩阵将被视为答案。

如果矩阵的行主视图的字符串在字典上小于另一个,则矩阵在字典上小于另一个。

Test case 1: //2 X 3 matrix
2 ? ? 
? ? 3 

Solution 1:
2 1 4 
5 6 3 

Test case 2: //6 X 6 matrix
? ? ? ? ? ? 
? ? ? ? ? ? 
? ? ? ? ? ? 
? ? ? ? ? ? 
? ? ? ? ? ? 
? ? ? ? ? ? 

Solution 2:
 1  2  3 13 14 15 
 4  6  8 10 11 16 
 5  7  9 12 19 17 
28 26 24 22 20 18 
29 27 25 23 21 36 
30 31 32 33 34 35

我的逻辑: 矩阵中的特殊元素总是连续的。因此,我们必须找出通过连接连续的特殊元素形成的最长路径。此外,在将元素放置在特殊元素(m,n)的相邻单元格(x,y)之前,我们首先填写特殊元素(m,n)的所有邻居(除了(x,y))和然后选择一个大于所有这些的值来填充 (x,y)。

我不知道如何继续前进以及如何包含字典上最小的条件。请帮忙。

提前致谢。

【问题讨论】:

  • 我不太明白这个定义。第一个测试用例中有多少特殊元素?我理解为3,即:2、5、6。如果是这样的话,不是[2 1 6; 3 4 5] 有更多特殊元素(除了 1)?之所以如此,是因为 3 大于 2 和 1; 4大于3和2; 5 大于 1、3 和 4;和 6 大于 4 和 5。我是否正确理解了这个问题?
  • @justhalf 在第一个示例中,数字 2 和数字 3 分别指定在左上角和右下角。所以你的反例是无效的。
  • m,n有没有上界

标签: algorithm matrix


【解决方案1】:

最好的解决方案是找到解决问题的算法,并证明它是正确的。缺少这些,还有更多选择。

回溯

这是一个组合问题,您可以使用backtracking 解决。成功实现回溯算法解决问题所需的关键点是:

  1. 为下一步找到一个好的启发式方法
  2. 找到一个好的早期停止启发式,分支和绑定

我会这样解决:

  • 找到所有可能放置下一个特殊元素的位置。正如您已经指出的那样,这样的地方不会很多。
  • 选择可用于添加下一个特殊值的所有可能的值组合,无论回溯中的后续步骤如何。在每一步(通过使用递归或通过创建定制的数据模型)跟踪哪些数字仍需放置,哪些是“常用”和特殊值。矩阵的其余部分可以留空(或 0),以便在回溯中进一步填充。对可能性进行排序,以便它们首先提供字典顺序较小的解决方案。尝试所有可行的可能性。
  • 如果没有要放置的特殊值,请按字典顺序填充矩阵中的空白点,这也是一项要求。

当您放置第 k 个特殊值 i 时可以提前停止,这样您将永远无法比当前的最佳解决方案做得更好。当然,当无法添加更多特殊值时,您还必须停止分支。像您建议的那样创建一个初始解决方案将是一个好的开始,并且比冷启动允许更多的分支切割。

或者也许有一点猜测......

即使经过优化,回溯也可能会太慢,因为它会尝试找到所有可能的解决方案。另一种方法是使用heuristic algorithm,例如genetic algorithmstabu searchvariable neighborhood searchsimulated annealing、...

此类算法可能会很快找到可行的解决方案,但不利的一面是,该解决方案可能不是最佳解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多