mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-13 15:56:05 +00:00
build
This commit is contained in:
@@ -3,7 +3,7 @@ comments: true
|
||||
status: new
|
||||
---
|
||||
|
||||
# 15.1. 贪心算法
|
||||
# 15.1 贪心算法
|
||||
|
||||
贪心算法是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期望获得全局最优解。贪心算法简洁且高效,在许多实际问题中都有着广泛的应用。
|
||||
|
||||
@@ -221,7 +221,7 @@ status: new
|
||||
}
|
||||
```
|
||||
|
||||
## 15.1.1. 贪心优点与局限性
|
||||
## 15.1.1 贪心优点与局限性
|
||||
|
||||
**贪心算法不仅操作直接、实现简单,而且通常效率也很高**。在以上代码中,记硬币最小面值为 $\min(coins)$ ,则贪心选择最多循环 $amt / \min(coins)$ 次,时间复杂度为 $O(amt / \min(coins))$ 。这比动态规划解法的时间复杂度 $O(n \times amt)$ 提升了一个数量级。
|
||||
|
||||
@@ -242,7 +242,7 @@ status: new
|
||||
1. **可以保证找到最优解**:贪心算法在这种情况下往往是最优选择,因为它往往比回溯、动态规划更高效。
|
||||
2. **可以找到近似最优解**:贪心算法在这种情况下也是可用的。对于很多复杂问题来说,寻找全局最优解是非常困难的,能以较高效率找到次优解也是非常不错的。
|
||||
|
||||
## 15.1.2. 贪心算法特性
|
||||
## 15.1.2 贪心算法特性
|
||||
|
||||
那么问题来了,什么样的问题适合用贪心算法求解呢?或者说,贪心算法在什么情况下可以保证找到最优解?
|
||||
|
||||
@@ -263,7 +263,7 @@ status: new
|
||||
|
||||
Pearson, David. A polynomial-time algorithm for the change-making problem. Operations Research Letters 33.3 (2005): 231-234.
|
||||
|
||||
## 15.1.3. 贪心解题步骤
|
||||
## 15.1.3 贪心解题步骤
|
||||
|
||||
贪心问题的解决流程大体可分为三步:
|
||||
|
||||
@@ -280,7 +280,7 @@ status: new
|
||||
|
||||
然而,正确性证明也很可能不是一件易事。如若没有头绪,我们通常会选择面向测试用例进行 Debug ,一步步修改与验证贪心策略。
|
||||
|
||||
## 15.1.4. 贪心典型例题
|
||||
## 15.1.4 贪心典型例题
|
||||
|
||||
贪心算法常常应用在满足贪心选择性质和最优子结构的优化问题中,以下是一些典型的贪心算法问题:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user