【发布时间】:2011-07-02 18:06:01
【问题描述】:
我收到了一项新的家庭作业,至少可以说有点令人沮丧。基本上,我创建了一个二维整数数组,如下所示:
97 47 56 36 60 31 57 54 12 55
35 57 41 13 82 80 71 93 31 62
89 36 98 75 91 46 95 53 37 99
25 45 26 17 15 82 80 73 96 17
75 22 63 96 96 36 64 31 99 86
12 80 42 74 54 14 93 17 14 55
14 15 20 71 34 50 22 60 32 41
90 69 44 52 54 73 20 12 55 52
39 33 25 31 76 45 44 84 90 52
94 35 55 24 41 63 87 93 79 24
我要写一个递归方法,或者你会的函数,来计算最长的递增子序列。在这个例子中,最长的递增子序列如下:
(5,0) with value 12
(6,0) with value 14
(6,1) with value 15
(6,2) with value 20
(7,2) with value 44
(7,3) with value 52
(7,4) with value 54
(6,3) with value 71
(5,3) with value 74
(4,3) with value 96
所以,我不仅要检查 N、S、E、W 的值是否严格更大,而且我还必须考虑对角线。我已经对如何递归解决这个问题进行了广泛的研究,但是我运气不佳,递归是我最薄弱的主题(是的,我知道它在某些情况下有多强大)。我看到过类似的帖子,有人提到了亚克力图,但这不是我要找的。p>
到目前为止,我基本上已经用 0 填充了我的 2D 数组,这样我就不必担心边界问题,并且我正在使用嵌套的 for 循环来遍历 2D 数组。在这些循环中,我基本上是在检查 N、NE、E、SE、S、SW、W、NW 是否具有比当前元素更大的值。对不起,如果我让你们中的一些人不高兴,这是我第一次尝试发帖。如果您需要我发布一些代码,我会这样做。非常感谢您的宝贵时间!
【问题讨论】:
-
我不明白,
the longest increasing sub sequence是什么意思? -
好的,在我上面发布的示例中,12,14,15,20,44,52,54,71,74,96 是一个递增的子序列。注意数字是如何严格按递增顺序排列的。希望这会有所帮助。
-
现在,我明白了,似乎需要做很多工作
-
这是一个相当艰难的过程。我假设您正在寻找与搜索方向无关的最长子序列?
-
@Perception 是正确的。 @templatetypedef 不幸的是,我们还没有在我们的数据结构类中介绍图表,尽管我从很多人那里听说使用图表更容易解决这个问题。