贪心算法理论与应用——以股票买卖问题为例

一、什么是贪心算法?

贪心算法(Greedy Algorithm)是一种在每一步都采取当前状态下最优(即最有利)的选择,最终得到问题整体最优解的方法。它的最大特点是**每一步决策都不回头**,只关注眼前利益,不从整体或长远考虑。

贪心算法的两个核心性质

  1. **贪心选择性质**:整体最优解可以通过一系列局部最优选择获得,每一步决策无需考虑前后信息,只依赖当前状态。

  2. **最优子结构性质**:一个问题的最优解包含了其子问题的最优解,即每一步的最优解是整体最优解的一部分。

判断是否适合贪心的标准

  • 分析问题能否**分解为各步骤的局部最优**,并且这些局部最优加起来是全局最优。

  • 检查问题是否具有**无后效性**,即每一步的选择不会影响之后的选择。

  • 如果不满足这些条件(比如需要回溯、未来存在影响),通常考虑动态规划等其他算法。

二、贪心算法通俗举例

  • **换零钱**:每次尽量选面值最大的币,一步步把金额减小到零。

  • **区间选点问题**:总是选择终点最早的区间点,覆盖所有区间。


三、买卖股票的最佳时机II(LeetCode 122)

题目描述

给定一个股票价格数组,可以进行不限次数的买和卖,但同一时间只能持有一只股票。问怎么获得最大利润?

贪心解法核心思路

只要今天的价格比昨天高,就在昨天买入、今天卖出,赚取这段差价利润,最终所有上涨区间的利润累加就是最大收益。

**伪代码:**

```python

profit = 0

for i in range(1, len(prices)):

if pricesi > pricesi-1:

profit += pricesi - pricesi-1

return profit

```

这段代码只需一次遍历,效率极高。

实例分析

  • `1,2,3,4,5`:每涨一次卖一次,等同一次买最低卖最高,总利润 4。

  • `7,1,5,3,6,4`:把每一次正增长区间都累计起来,利润 4+3=7。

为什么后面的信息不影响当前决策?(无后效性证明)

决策只关心当前当前一天和下一天的价格涨跌情况------

  • 若 `pricesi+1 > pricesi`,立刻卖掉,赚这个差价。

  • 即使未来可能还有更高点,把所有连续上涨差价相加,最终利润等于直接最低买最高卖。

**数学表达**:连续上涨区间累计所有小差值,和"最低买最高卖"结果完全等价。

```

(p2-p1) + (p3-p2) + ... + (pn-pn-1) = pn - p1

```


四、理论小结

  • 用贪心算法解决股票买卖问题的前提是,每一次操作(买卖)只依赖当前局部信息。

  • 贪心法总能cover所有正利润机会,无论区间如何涨跌,获得最大结果。

  • 贪心法高效简洁,一步步积累当前最有利的选择即可取得全局最佳。


>

相关推荐
m0_7202450113 小时前
1543.统计好三元组(简单)
开发语言·算法
To_OC13 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
hans汉斯14 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院14 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李15 小时前
08 进阶评估指标与算法特定指标
人工智能·算法
.道阻且长.15 小时前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
我是海飞16 小时前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理
wabs66616 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
lsylalalala18 小时前
常见的排序算法1
数据结构·算法·排序算法
想吃火锅100519 小时前
【leetcode】54. 螺旋矩阵
算法·leetcode·矩阵