File tree 1 file changed +16
-9
lines changed
1 file changed +16
-9
lines changed Original file line number Diff line number Diff line change 1
- 这道题我一看到,我就想到了我的最爱——** [ 贪心算法] ( http://zh.wikipedia.org/wiki/%E8%B4%AA%E5%BF%83%E6%B3%95 ) ** ,太典型了好么。
2
- 求拥有最大** 和** 的子序列,那么秉承贪心原则,假设初始解为A[ 0] ,那么我增加一个元素(A[ 1] ),我就需要考虑,我的利益是多了,还是损失了。
1
+ ~~ 这道题我一看到,我就想到了我的最爱——** [ 贪心算法] ( http://zh.wikipedia.org/wiki/%E8%B4%AA%E5%BF%83%E6%B3%95 ) ** ,太典型了好么。
2
+ 求拥有最大** 和** 的子序列,那么秉承贪心原则,假设初始解为A[ 0] ,那么我增加一个元素(A[ 1] ),我就需要考虑,我的利益是多了,还是损失了。~~
3
+
4
+ 经 @Mooophy 在 [ issue] ( https://github.com/pezy/LeetCode/issues/10 ) 里指出,下述思路并不属于贪心的范畴。荣誉属于 DP,另外得知它有一个历史名字:[ Kadane's algorithm] ( http://en.wikipedia.org/wiki/Maximum_subarray_problem ) .
5
+
6
+ ----
7
+ ** 贪心法与 DP 的最大区别在于** :
8
+
9
+ - 动态规划讲究"** 记录历史** "以及"** 根据历史记录做出最优选择** "。
10
+ - 贪心法对历史无记录,每一次是根据 ** 当前情况做出最优选择** 。
11
+
12
+ ----
13
+
3
14
由于题意要求,子序列至少要连续,所以没可能跳过 A[ 1] , 只有两个选择:
4
15
5
16
1 . A[ 0] + A[ 1]
@@ -17,13 +28,9 @@ maxv = max(benefited, maxv);
17
28
18
29
聪明的你一定发现了,第一句条恰是** 当权者的决策** ,第二条恰是** 历史学家的总结** 。 横批:人类是贪婪的。
19
30
20
- 所以不要怪任何一方,从他们的立场看,都是最优解。局部最优能否导致整体最优呢? 千年谜题。
21
-
22
- ------
31
+ ** 由于我们累计了 ` benefited ` ,并根据其值进行每一次选择。故该解法的本质是 DP 而非贪心。**
23
32
24
- 题目比较基础,扯了点政治与历史。谁说计算机与人文不是密切相关的。。。
25
-
26
- ------
33
+ -----
27
34
28
35
另外,该题下面说到 More practice, 提到要用分治法?我没什么思路,请明白者提点。
29
36
@@ -33,7 +40,7 @@ maxv = max(benefited, maxv);
33
40
34
41
-----
35
42
36
- @Mooophy 应约而出,给出了[ 代码] ( #8 ) ,我根据其代码,尝试分析一下分治法的策略:
43
+ @Mooophy 应约而出,给出了[ 代码] ( https://github.com/pezy/LeetCode/pull/9/files ) ,我根据其代码,尝试分析一下分治法的策略:
37
44
38
45
分治法的灵魂在于一个 ** "分"** 字。对于这道题而言,求` A ` 的最大和子序列,可以给` A ` 来一刀:
39
46
You can’t perform that action at this time.
0 commit comments