美文网首页
最大子串和算法与归纳递推法

最大子串和算法与归纳递推法

作者: 天之見證 | 来源:发表于2020-03-17 00:27 被阅读0次

1. 问题描述

现有一个整数序列 (2,-3,1,5,-1,3,-2,-3,3, \ldots), 长度为 n, 求具有最大和的子串

2. 初次的归纳递推尝试

现有序列 S=(x_1,x_2,\ldots,x_n)

假设:

已知长度小于 n 的序列所对应的最大子串和

即: 我们现在知道对于序列 S'=(x_1,x_2,\ldots,x_{n-1}) 对应的最大子串和, 可假设为 S'_M=(x_i,x_{i+1},\ldots,x_j), 1\le i\le j\le {n-1}

分条件讨论如下:

j x_n S'_M
j=n-1 x_n>0 (S'_m,x_n)
j=n-1 x_n<=0 S'_M
j<n-1 1. S'_M 保持不变 2. 加上x_n之后, 原来不是最大的变成最大的了(此时得到的串一定是以 x_n结尾的)

可见, 在第三种情况的时候, 并不能得出明确的结论

3. 更强的假设

假设:

已知长度小于 n 的序列所对应的最大子串和和以 x_{n-1}结尾的最大的子串 S'_{suffix}

接着上表的第3种情况分析:

情况 S'_M 备注
sum(S'_{suffix})+x_n \le sum(S'_M) S'_M 其中的第1点可以明确了
sum(S'_{suffix})+x_n > sum(S'_M) (S'_{suffix},x_n) 其中的第2点可以明确了

这里不再需要考虑 x_n 是否大于0了

4. 伪代码

global_max = 0
suffix_max = 0
for i in range(0, len(arr)):
  if arr[i] + suffix_max > global_max:
    suffix_max = suffix_max + arr[i]
    global_max = suffix_max
  elif arr[i] + suffix_max > 0:
    suffix_max = suffix_max + arr[i]  // 这里可以维持住suffix的最大这种情况
  else: // arr[i] < 0 且很小
    suffix_max = 0

5. 加强型归纳递推

一般的归纳递推:

P(\lt n) \Rightarrow P(n)

加强型归纳递推:

[P \& Q](\lt n) \Rightarrow P(n)

在加强型的情况下其实隐含了 [P \& Q](\lt n) \Rightarrow [P \& Q](n)

引入了 Q 的代价就是你得维护这个 Q 的状态迁移, 即 Q(n-1) \Rightarrow Q(n), 这个也必须是可证明或者是确定的

就如上面代码中的 suffix_max 这个变量的维护

ref:

  1. Introduction to algorithm a creative approach [udi manber]
  2. https://mathoverflow.net/questions/31699/strengthening-the-induction-hypothesis

相关文章

  • 最大子串和算法与归纳递推法

    1. 问题描述 现有一个整数序列 (), 长度为 , 求具有最大和的子串 2. 初次的归纳递推尝试 现有序列 假设...

  • 292. Nim Game

    key tips: 尝试dp方法,递推 分析轮次,寻找必然失败的stone number 算法 dp 归纳法

  • 数学归纳法

    重点是归纳!!!,数学归纳法的核心思想是逆向递推,有结果反推前一步

  • 递推归纳

    走法都是前两级走法之和,不同走法,1,2,3,5,8,13,21,34,55,89,144。总共233种 之和

  • 创业者用编程来理解归纳法和演绎法

    前段时间看到了归纳法与演绎法的概念,一直在思考人在什么时候会用归纳法和演绎法来做事。 1. 归纳法 归纳法是人最普...

  • 算法-理解动态规划

    算法-动态规划(1)最大子序和问题[/p/7e787a287876]算法-动态规划(2)最长公共子串[/p/7ba...

  • 常用算法思想

    1. 递推算法 递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。顺推法:是指从已知条件出发,逐步...

  • 算法思想

    算法思想有很多,业界公认的常用算法思想有8种,分别是枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟。至于还有...

  • 2018-12-31[LeetCode 53.Maximum S

    [LeetCode 53.Maximum Subarrays] 描述: 问题是求解最大子串的和,返回该和。(子串与...

  • 王道程序员求职宝典(九)基本算法及链表

    分治法,动态规划与贪心算法 分治法特征分解解决合并递归:自顶向下 动态规划要素最优子结构重叠子问题递推:自底向上步...

网友评论

      本文标题:最大子串和算法与归纳递推法

      本文链接:https://www.haomeiwen.com/subject/cfvaehtx.html