算法 – 技术面试:MxN矩阵中最长不减小子序列

最近我在技术面试中问了这个问题.这是我的解决方案http://pastebin.com/JMVHcfRq我做错了还是有更好的解决方案?

Find the length of the longest non-decreasing sequence through adjacent, non-repeating cells (including diagonals) in a rectangular grid of numbers in a language of your choice. The solution should handle grids of arbitrary width and height.
For example, in the following grid, one legal path (though not the longest) that could be traced is 0->3->7->9 and its length would be 4.
8 2 4
0 7 1
3 7 9
The path can only connect adjacent locations (you could not connect 8 -> 9). The longest possible sequence for this example would be of length 6 by tracing the path 0->2->4->7->7->9 or 1->2->4->7->7->8.
Write a method, in a language of your choice, that takes a rectangular grid of numbers as input, and returns the length of the longest such sequence as output.

最佳答案
您可以使用有向图为您的问题建模:

每个单元格是您的图中的顶点,如果两个单元Ci,j,Ck,m相邻,并且Ci,j < CK,男. 现在你的问题是在这个图中找到最长的路径,但是这个图是Directed非循环图,因为当问题表明矩阵中没有重复的数字也是“<”关系是反对称的.所以你的问题减少了在有向非循环图中找到最长的路径,这很容易,首先做拓扑排序,然后找到最长的路径.例如参见this.

更新:
乍一看,我以为是不可能有平等的邻居,但现在我看到是可能的.在上面的图形结构中,我们应该替换< < =然后确定的图形不是非循环的,但仍然是问题等于找到该图中最长的路径. P.S1:如果我有这个最长路径问题的任何多项式答案,我会把它带到这里,但可能是这个分类的问题更容易搜索. P.S2:在评论中提到的mbeckish,longest path problem是NP-Hard的一般图,但我认为在这种特殊情况下可以解决P,但是我现在还没有精确的算法.

P.S3:我做了一点研究,我看到,Hamiltonian path in grid graph is NP-Complete,所以似乎你的问题也是NP-Complete(我现在没有减少,但他们彼此非常接近).

转载注明原文:算法 – 技术面试:MxN矩阵中最长不减小子序列 - 代码日志