【有作图代码】贪心算法,一个“短视的决策者”,它通过每一步选择当前最优解,逐步构建全局的近似最优解。

【有作图代码】算法哲学:贪心算法,一个“短视的决策者”,它通过每一步选择当前最优解,逐步构建全局的近似最优解。

第一节:贪心算法与短视决策的类比与核心概念【尽可能通俗】

贪心算法就像是一个“短视的决策者”,它在每一步都选择当前看起来最优的解决方案,而不考虑长远的影响。这种策略虽然简单且高效,但有时候可能会因为过于短视而错过全局的最优解。就像是一个人在迷宫里,每次都选择看起来最宽敞的道路走,结果可能绕了远路,但每一步都是他自己认为最好的选择。

第二节:贪心算法的核心概念与应用

2.1 核心概念

核心概念定义比喻或解释
贪心算法一种在每一步都选择当前最优解的算法策略,旨在通过局部最优达到全局近似最优。像是一个“短视的决策者”,只看重眼前的利益,不考虑长远的影响。
局部最优解在当前步骤下,使得目标函数值达到最大的解。就像是迷宫里的一个宽敞路口,看起来是当前最好的选择。
全局最优解在整个问题范围内,使得目标函数值达到最大的解。就像是迷宫里的最短路径,但贪心算法可能找不到这个路径。

2.2 优势与劣势

方面描述
优势简单、高效,适用于一些特定问题,能够快速找到近似最优解。
劣势可能因为过于短视而错过全局最优解,对某些问题不适用。

2.3 与决策过程的类比

贪心算法在决策过程中扮演着“短视决策者”的角色,它只关注当前步骤的最优选择,而不考虑后续步骤可能带来的影响。这种策略在某些情况下是有效的,但在其他情况下可能会导致次优解。

第三节:公式探索与推演运算

3.1 贪心算法的基本思想

贪心算法的基本思想可以概括为:在每一步都选择当前最优的解,逐步构建全局的近似最优解。这种策略可以表示为:

选择=arg⁡max⁡x∈当前可选解集f(x) \text{选择} = \arg\max_{x \in \text{当前可选解集}} f(x) 选择=argx当前可选解集maxf(x)

其中,f(x)f(x)f(x) 是目标函数,表示选择 xxx 所能带来的收益或价值。

3.2 贪心选择性质

贪心算法的关键在于贪心选择性质,即局部最优解能够导致全局最优解(或近似最优解)。
然而,并不是所有问题都满足这一性质。因此,在应用贪心算法时,需要仔细分析问题是否具备贪心选择性质。

3.3 具体实例与推演

以“活动选择问题”为例,假设有一组活动,每个活动都有一个开始时间和一个结束时间,目标是选择尽可能多的不重叠活动。贪心算法的策略是:每次选择结束时间最早的活动,因为这样可以留出更多的时间给后续活动。

具体步骤如下:

  1. 排序活动:按照活动的结束时间对活动进行排序。
  2. 选择活动:从第一个活动开始,依次选择结束时间最早且不与前一个活动重叠的活动。

通过这种方式,贪心算法能够快速找到一个近似最优解。

第四节:相似公式比对

公式/算法共同点不同点
动态规划都用于求解优化问题。动态规划考虑全局最优解,通过子问题的最优解构建全局最优解;贪心算法只考虑当前最优解。
分治法都通过分解问题来求解。分治法将问题分解为独立的子问题;贪心算法在每一步都选择当前最优解,逐步构建全局解。
回溯法都用于搜索解空间。回溯法通过尝试所有可能的解来找到最优解;贪心算法只选择当前最优解,可能错过全局最优解。

第五节:核心代码与可视化

下面是一个使用贪心算法解决“活动选择问题”的Python代码示例,并附带可视化展示。

# 此代码实现了以下功能:
# 1. 定义了活动选择问题,包括活动的开始时间和结束时间。
# 2. 使用贪心算法选择尽可能多的不重叠活动。
# 3. 可视化了选择的活动和未选择的活动,通过不同的颜色进行区分。
# 4. 在控制台打印了选择的活动的详细信息。

import matplotlib.pyplot as plt
import seaborn as sns

# 定义活动
activities = [
    {"start": 1, "end": 3},
    {"start": 2, "end": 4},
    {"start": 0, "end": 6},
    {"start": 5, "end": 7},
    {"start": 8, "end": 9},
    {"start": 5, "end": 9}
]

# 按照结束时间对活动进行排序
activities.sort(key=lambda x: x["end"])

# 使用贪心算法选择活动
selected_activities = []
last_end_time = -1

for activity in activities:
    if activity["start"] >= last_end_time:
        selected_activities.append(activity)
        last_end_time = activity["end"]

# 可视化结果
sns.set_theme(style="whitegrid")
plt.figure(figsize=(10, 6))

# 绘制所有活动
for activity in activities:
    plt.axvspan(activity["start"], activity["end"], color='lightgray', alpha=0.5)

# 绘制选择的活动
for activity in selected_activities:
    plt.axvspan(activity["start"], activity["end"], color='blue', alpha=0.7, label='Selected Activity' if len(selected_activities) > 1 else 'Selected')

plt.xlabel('Time')
plt.ylabel('Activities')
plt.title('Greedy Algorithm for Activity Selection')
plt.legend()
plt.grid(True)
plt.show()

# 打印选择的活动的详细信息
print("Selected Activities:")
for activity in selected_activities:
    print(f"Start: {activity['start']}, End: {activity['end']}")

print("""
| 输出内容                                  | 描述                               |
|-------------------------------------------|------------------------------------|
| 所有活动和选择活动的图示                    | 显示了所有活动和贪心算法选择的活动。   |
| 选择的活动的详细信息(打印到控制台)         | 提供了关于选择活动的开始时间和结束时间的详细信息。 |
""")

print("""
贪心算法就像是一个“短视的决策者”,它在每一步都选择当前看起来最优的解决方案,而不考虑长远的影响。
这种策略虽然简单且高效,但有时候可能会因为过于短视而错过全局的最优解。
""")
输出内容描述
所有活动和选择活动的图示显示了所有活动和贪心算法选择的活动。
选择的活动的详细信息(打印到控制台)提供了关于选择活动的开始时间和结束时间的详细信息。

在这里插入图片描述

参考文献

  1. Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd ed.). MIT Press. [经典算法教材,详细介绍了贪心算法等算法策略]内容概述:该书是算法领域的经典教材,详细介绍了各种算法策略,包括贪心算法、动态规划、分治法等,为理解和应用这些算法提供了全面的指导。
  2. Kleinberg, J., & Tardos, É. (2006). Algorithm Design. Pearson Education. [算法设计领域的权威教材]内容概述:该书涵盖了算法设计的基本原理和方法,包括贪心算法、动态规划、回溯法等,通过丰富的案例和实例,帮助读者深入理解和掌握这些算法策略。

关键词:

#贪心算法 Greedy Algorithm
#局部最优解 Local Optimal Solution
#全局最优解 Global Optimal Solution
#活动选择问题 Activity Selection Problem
#短视决策 Short-sighted Decision Making

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

认知计算 茂森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值