理解算法中的“贪”
发布时间: 2024-01-29 22:50:18 阅读量: 50 订阅数: 39 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![PPT](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PPT.png)
贪心算法的理解和实现
# 1. 什么是算法中的“贪”?
## 1.1 定义和概述
贪婪算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。贪婪算法对解决一些最优化问题非常有效,如:最小生成树、单源最短路径、背包问题等。
## 1.2 历史背景
贪婪算法的概念最早可以追溯到1956年,由诺贝尔奖得主约翰·福克纳·卡拉汉提出,并被丹麦计算机科学家克里斯托弗·斯特拉赫提出和推广。
## 1.3 研究意义
贪婪算法在经济学、工程学、运筹学、生物学等领域都有着重要的应用价值,因此对贪婪算法的深入研究具有重要的理论和实际意义。
# 2. 贪婪算法的基本原理
贪婪算法是一种常见的算法设计策略,它的基本原理是通过每一步的局部最优选择来达到全局最优解。在贪婪算法中,每一步都选择当前状态下最优的解决方案,而不考虑该选择可能会对未来的决策产生怎样的影响。
### 2.1 贪婪选择性质
贪婪算法的关键在于贪婪选择性质,它指的是每一步的选择都应该是当前情况下的最优选择,即在考虑局部最优的基础上,保证全局最优。
### 2.2 最优子结构性质
贪婪算法的另一个关键原理是最优子结构性质,它指的是一个问题的最优解可以通过一系列局部最优的选择得到。换句话说,问题的最优解可以通过子问题的最优解推导得到。
### 2.3 贪婪算法的流程
贪婪算法的流程一般可以概括为以下几步:
1. 定义问题的解空间和解决方案的表示形式。
2. 制定贪婪选择策略,确定每一步的最优选择。
3. 利用贪婪选择策略,逐步构建解决方案。
4. 检查解决方案是否满足问题的约束条件和目标要求。
5. 如果满足要求,则输出结果;如果不满足要求,则返回第2步继续选择。
贪婪算法的核心在于选择每一步的局部最优解,通过不断优化每一步的选择,最终得到全局最优解。但需要注意的是,并非所有问题都适合使用贪婪算法,有些问题可能存在局部最优解不一定会导致全局最优解的情况,这时候就需要考虑其他算法策略。
```python
# 贪婪算法示例:找零问题
def greedy_change(total_amount, denominations):
change = []
for coin in sorted(denominations, reverse=True):
while total_amount >= coin:
change.append(coin)
total_amount -= coin
if total_amount != 0:
raise ValueError("Unable to make change with given denominations.")
return change
total_amount = 78
```
0
0
相关推荐
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)