【问题标题】:Find the longest increasing subsequence in a 2-D array在二维数组中找到最长的递增子序列
【发布时间】:2011-07-19 05:52:44
【问题描述】:

我有这个问题作为家庭作业,我真的不知道从哪里开始。我已经使用递归算法(#1)实现了解决方案,但我无法弄清楚如何使用堆栈解决问题......任何帮助都会很棒。

在 15 x 15 数组中找出最长的递增数字序列。例如,如果数组 4x4 包含

97  47  56  36
35  57  41  13
89  36  98  75
25  45  26  17

那么最长的数字递增序列是长度为 8 的序列,由 17、26、36、41、47、56、57、97 组成。注意递增序列中没有重复。

  1. 设计一个递归算法来解决这个问题并用Java实现。

  2. 设计一种非递归算法来使用堆栈解决相同的问题。

【问题讨论】:

  • 我无法看到您显示的阵列是 4x4。
  • @Recursor “我真的不知道从哪里开始。”从这里开始home.earthlink.net/~patricia_shanahan/beginner.html
  • 对不起,我一定搞砸了格式。 - 更新。
  • @Andrew Thompson 我可能夸大了我不知道。我知道如何解决这个问题,因为我递归地做了,我只是不知道使用堆栈会有什么帮助。我意识到这需要遍历并使用每个项目作为起点,然后找到每个起点的最大子序列。我真的只是不确定如何使用堆栈来做到这一点......
  • I have implemented the solution using a recursive algorithm (#1) - 你能出示这段代码吗?

标签: java multidimensional-array stack


【解决方案1】:

因为这是作业,所以这里有一个提示: 您可以将数字数组转换为有向无环图。 (它是非循环的,因为序列中不允许重复。)之后,您可以使用算法解决最长路径问题,在图中找到最大长度的简单路径。

【讨论】:

  • 谢谢我在想一些有这种效果的东西(树),但这听起来也不错。那么您会说图形类似于数组[x,y] - >所有节点不同,数组[x+/-1],[y+/-1]是>数组[x,y]等?当我检索结果时,我只是不确定我的堆栈在哪里发挥作用?
  • @Recursor - 将问题分为两部分。 1)用递归算法解决问题。 2)将递归算法变成迭代算法,使用Stack来保存递归版本中局部变量/参数中保存的状态。
猜你喜欢
  • 2018-03-26
  • 2016-05-04
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
相关资源
最近更新 更多