动态规划算法作业.docxVIP

  • 102
  • 0
  • 约9.93千字
  • 约 13页
  • 2018-12-28 发布于浙江
  • 举报
动态规划作业 (所有算法实现代码承诺为本人自己编写并且截图为实际有效截图) 作者:吴迪 参考资料:课件ppt,百度百科 算法分析 3-1 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。 分析:考虑一个拥有n个元素的数列{an}, 欲找出其最长单调递增子序列,对于前i-1个元素组成的单调递增序列,考虑第ai个元素,最长单调递增子序列是否应该包含这个元素?如果它在序列中不是单增的,并且能确定前面的元素都是必定选中的,那么肯定它不被选入单增序列;如果它是单增的,仍然需要考虑它后面可能出现多于一个元素的单增子序列都比它要小的情况。所以在这样的条件下,使用动态规划的方法,递归分析是合理的选择。 用数列{bi}来记录数列{an}的最长单调递增子序列,0=in,假设ai是当前入选的最后一个元素 b[0]=1,b[i]=max{b[k]}+1 ,其中0=kI,a[k]a[i] 设max表示子序列的最大长度,初始化赋值为0。从第一个元素a0开始选取,对于数组每个元素ai , b[0]=1; for i=1…n { k=0 for j=0…i if(a[j]=a[i]kb[j]) k=b[j]; b[i]=k-1; } max=0 for i=1…n { if(b[i]max) max=b[i]; } 算法复杂性为0(n 算法分析 3-4

文档评论(0)

1亿VIP精品文档

相关文档