• 最大子数组的线性解法


    题目出自算法导论第三版,4.1-5.

      线性算法的核心思想是如果已知A[1...j]的最大子数组,那么对于A[1...j+1]中的最大子数组:要么包括A[j+1];要么不包括A[j+1],即就是原最大子数组。

      该题中提出“在已知A[1...j]中最大子数组的情况下,可以在线性时间内找出形如A[i...j+1](1<=i<=j+1)的最大子数组”,这一点让我大惑不解。如果这样是线性的话,那遍历数组,总的解法不又是O(N²)了么?又何谈O(N)?

    必然得在常量时间内找出A[i...j+1]才行。

      那么如何在常量时间内找出它呢?

      首先我们分析包括A[j+1]的最大子数组的起始元素A[i]。

      整个数组可被一些临界元素分割为一系列正和连续子段。对于其中任一子段,设其首元素为A[k],尾元素为A[h],则对任意 m (k<m<=h) 均有 sum(A[k...m]) > 0. 但A[h+1] +   sum(A[k...h]) <= 0.

      A[i] 就是距离A[j+1]最近的正和子段的首元素。为什么呢?

      具体证明见:

      http://segmentfault.com/a/1190000000733277

      找到了包括A[j+1]的最大子数组,然后比较A[1...j]的最大子数组与其的大小,重复如此至A[N], 即得出最大子数组。

      

    参考:http://segmentfault.com/a/1190000000733277

             http://www.xuebuyuan.com/1265810.html

  • 相关阅读:
    编码器的集电极输出、电压输出、互补输出和线性驱动输出
    2、控制系统的工程规划
    组件的注册
    脉冲和PWM波的区别和比较
    1、计算机控制系统概述
    Javaweb之国际化
    Javaweb之文件的上传与下载
    Servlet监听器
    Filter(过滤器)(有待补充)
    Javabean及其在jsp中的应用
  • 原文地址:https://www.cnblogs.com/zqiguoshang/p/4826676.html
Copyright © 2020-2023  润新知