• 最大子列和的几种算法比较


    前言

    • 最大子列和是一个经典算法问题,在《算法导论》中有一歌股票问题的应用。已知一周的股票价格,考虑在正常的时间顺序下,想在最低价买进,最高价卖出,求出这段区间。
    • 可以构建一个新的数组,每一个数都是该天与前一天之差,然后就转化为求最大子列和的问题。

    O(n^3)——最差暴力求解

    • 算出每一个子列和,大于现有最大值,就更新这个值。
    • 比暴力求解算法还多余了一层循环。

    O(n^2)——暴力求解

    • 算法同最差暴力求解,但稍有优化,却不足够。

    O(nlgn)——分治法

    • 把求最大子列分为三种情况:1. 不包含中点值的左端最大子列和。 2. 不包含中点值的右端最大子列和。
    1. 必包含中点值的最大子列和。

    O(n)——在线处理

    • 从第一个数开始累加,一旦子列和为负就舍弃前面的子列和,从下一个数并且从0开始重新累加,一旦超过现有的最大值就更新最大值。
    • 重点:为负的子列和,不可能使后面的子列和更大!

    总结

    • 暴力求解的方法是最直观的最容易想到的算法,但是时间复杂度过高。
    • 分治法把时间复杂度降低了很多,但是由于使用了递归,空间复杂度大大增加,所以也不实用。
    • 在线处理方法空间复杂度和时间复杂度都最优,抓住了问题的本质,同时提供了一个在线处理的思想,不断丢弃无用的东西,从而简化算法。
  • 相关阅读:
    ORM开发之解析lambda实现完整查询(附测试例子)
    ORM开发之解析lambda实现group查询(附测试例子)
    ORM之殇,我们需要什么样的ORM框架?
    公开封尘已久的即时通讯源码
    javascript中的this与函数讲解
    javascript中的操作符详解1
    javascript中的继承与深度拷贝
    javascript之Object.defineProperty的奥妙
    javascript之活灵活现的Array
    jquery.Callbacks的实现
  • 原文地址:https://www.cnblogs.com/vancasola/p/7609917.html
Copyright © 2020-2023  润新知