Skip to content

Commit

Permalink
fixed #10
Browse files Browse the repository at this point in the history
  • Loading branch information
pezy committed Apr 10, 2015
1 parent 94b629d commit f606c12
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions 014. Maximum Subarray/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
这道题我一看到,我就想到了我的最爱——**[贪心算法](http://zh.wikipedia.org/wiki/%E8%B4%AA%E5%BF%83%E6%B3%95)**,太典型了好么。
求拥有最大****的子序列,那么秉承贪心原则,假设初始解为A[0],那么我增加一个元素(A[1]),我就需要考虑,我的利益是多了,还是损失了。
~~这道题我一看到,我就想到了我的最爱——**[贪心算法](http://zh.wikipedia.org/wiki/%E8%B4%AA%E5%BF%83%E6%B3%95)**,太典型了好么。
求拥有最大****的子序列,那么秉承贪心原则,假设初始解为A[0],那么我增加一个元素(A[1]),我就需要考虑,我的利益是多了,还是损失了。~~

@Mooophy[issue](https://github.com/pezy/LeetCode/issues/10) 里指出,下述思路并不属于贪心的范畴。荣誉属于 DP,另外得知它有一个历史名字:[Kadane's algorithm](http://en.wikipedia.org/wiki/Maximum_subarray_problem).

----
**贪心法与 DP 的最大区别在于**

- 动态规划讲究"**记录历史**"以及"**根据历史记录做出最优选择**"。
- 贪心法对历史无记录,每一次是根据 **当前情况做出最优选择**

----

由于题意要求,子序列至少要连续,所以没可能跳过 A[1], 只有两个选择:

1. A[0] + A[1]
Expand All @@ -17,13 +28,9 @@ maxv = max(benefited, maxv);

聪明的你一定发现了,第一句条恰是**当权者的决策**,第二条恰是**历史学家的总结**。 横批:人类是贪婪的。

所以不要怪任何一方,从他们的立场看,都是最优解。局部最优能否导致整体最优呢? 千年谜题。

------
**由于我们累计了 `benefited`,并根据其值进行每一次选择。故该解法的本质是 DP 而非贪心。**

题目比较基础,扯了点政治与历史。谁说计算机与人文不是密切相关的。。。

------
-----

另外,该题下面说到 More practice, 提到要用分治法?我没什么思路,请明白者提点。

Expand All @@ -33,7 +40,7 @@ maxv = max(benefited, maxv);

-----

@Mooophy 应约而出,给出了[代码](#8),我根据其代码,尝试分析一下分治法的策略:
@Mooophy 应约而出,给出了[代码](https://github.com/pezy/LeetCode/pull/9/files),我根据其代码,尝试分析一下分治法的策略:

分治法的灵魂在于一个 **"分"** 字。对于这道题而言,求`A`的最大和子序列,可以给`A`来一刀:

Expand Down

0 comments on commit f606c12

Please sign in to comment.