分治策略

来源:互联网 发布:苹果logo的由来知乎 编辑:程序博客网 时间:2024/06/05 06:31

4.1 最大子数组问题

寻找股票最佳买入卖出点,最开始并没有把它转化为 和最大 的连续子数组问题。

因此考虑了两种情况:a。分治法,思路也是一样的,要不买入卖出点都在左半边,要不都在右半边,要不一个在左一个在右,那值一定是左半边的最小值和右半边的最大值。

递归的退出条件就是划分为单个元素时为零,因此两个元素的时候就只需要考虑两个值的相对大小。

                                       b。 记忆中记错了的思路,以为是只可以考虑线性连续递增的部分求最值,最后发现貌似真的是记忆力记错了。


参看书本后大概了解到问题的转化,转化为delta问题,求每两个交易点之间的差值。!!这里要注意边界值,包括最终答案的转化。

                                        a。分治法的思路也是一样的,要不都在同一个半边,要不就是求从中间点开始向两边的的子数组和的最小值。也可以认为是最值。

                                             算法复杂度为O(nlogn)

                                       b。回想起了印象中的single pass的方法。是指在负数的基础上再加上新的数就不如直接舍弃掉负数以及之前的数了。也就是说对delta数组进行遍历的时候,依次把右边新的数累加进来,如果比当前的最大值高,则用left和right值以及最值进行更新;如果累加值已经小于零,则之前的累加没有意义,将left值重新设置为下一个不为负数的值,然后迭代。最终得到的left、right、sum值就是答案的求解。

                                             算法复杂度为O(n)

                                            !!网上查询之后发现了另外一个问题,如果所有的delta都是负数的话,那就应当去负数的最大值,这里要作为一种exception被考虑


4.2 矩阵乘法的Strasson算法

strasson就是记不住啊……此处以后再看一下吧……

0 0
原创粉丝点击