4.1最大数组问题(算法导论)

呃 先查几句题外话 。。。
昨晚的一个梦。。。
那是战争刚结束的时候 梦里的我作为战争结束的幸存者 与 一堆莫名的 疲惫的人们一起跳伞 回家 (梦。。所以 我也不懂为啥跳伞回家。。)然后呢 莫名的我好像生气了 暴怒 干死了一个战友。。。(啊啊啊啊 我也不知道为啥子 只记得 蛮愤怒的 )然后 毕竟 犯罪了 坐牢是一定的 当时我就无比的绝望 绝望到冷静下来 寻找在监狱里可能 找到的乐趣 。。编程。。(呃 真的 无语 )啊 感慨 还是可以接受的嘛 (其实已经深深的绝望了 人生 就这样荒废了)突然 我想到了一件事
劳资 是在做梦啊啊 我没有犯罪 当时我就醒了 万分的轻松 就是那种 有了希望的 如释重负 的 舒服 当时我 就感觉到了一点 人生 如此 艰辛 易碎 千万 不要做出 让自己的人生失去意义的事 千万珍惜自己的人生 努力 无论如何不要 某一天醒来 发现自己已经 老了 或者 失去 了 最宝贵的时间。。
呃呃呃 我还做了一个梦 梦见我买了三条可爱的小狗 比猫便宜可能 努力吧 为了在两三年内
养得起 猫(英国短尾猫 抑或 布偶猫 一定 )
好了 进入今天的学习。。。。。。。。。。。。。。。。。。。。。。
最大数组问题 是买入及卖出的股票问题 (哇 好有用 )
第一最方法自然是 暴力求解
假设有n个输入 那么 也就有n方左右的计算量
从另外一个不同的角度来 看待 数据的输入 化为 价格变化 (本质上没有啥变化 只不过 是可以 累加了 耶)
那么 如果想用分治法来 解决呢
来 先回顾一下 分治法的过程。。。

分解 解决 合并

ok 那么原问题 第一分解 分解为两个部分 两个 子数组 完全ojbk
那么解决咋去解决呢
目的是为了去求最大的子数组 那么最大数组只有
三种情况 完全在左边 横跨中间 完全在右边
敲重点 重点
完全在左边 以及 右边 就用递归自己调用自己就OK了 天了噜 天了噜
这么神奇
剩下的是如何解决 横跨中间的问题如何解决
第二个 重点 如何去求呢 ???
分成俩部分 求出左边到中间最大的 加上中间到右边最大的 就是横跨最大的 复杂度为n左右

那么总的时间复杂度就降低到nlogn 至于为啥是nlogn呢
这里写图片描述
好看不 其实 在这个递归里 cn 只循环了logn+1 次 这就是为啥 时间复杂度降低了的原因
总上所述 这个问题 加深了对分治法的理解

猜你喜欢

转载自blog.csdn.net/weixin_39722329/article/details/79319143
今日推荐