Python实战开发及案例分析(5)—— 贪心算法

        贪心算法是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法不能保证得到最优解,但在某些问题中非常有效,并容易实现。

案例分析:找零问题

项目背景:假设你是一名收银员,需要给顾客找零,你的目标是在给出确切金额的同时,使用尽可能少的硬币。

问题设定
  • 有不同面额的硬币:1分,5分,10分,25分。
  • 需要找给顾客确切的零钱,同时使用最少的硬币。
使用 Python 实现贪心算法
def greedy_coin_change(amount, coins):
    # 初始化
    result = []
    # 从最大的硬币开始尝试
    for coin in sorted(coins, reverse=True):
        while amount >= coin:
            amount -= coin
            result.append(coin)
    return result

# 硬币面额
coins = [1, 5, 10, 25]

# 找零金额
amount = 63

# 调用函数
change = greedy_coin_change(amount, coins)

# 输出结果
print("Coins to give:", change)
print("Number of coins:", len(change))
结果分析

        这个贪心算法从最大的硬币开始,尽可能多地使用每种硬币,直到找零金额被减至零。在这种情况下,算法能够有效地减少需要使用的硬币数量。

更复杂的案例:活动选择问题

项目背景:你有一系列活动,每个活动都有一个开始时间和结束时间。你的目标是安排尽可能多的活动,使得活动之间不相互冲突。

问题设定
  • 活动由其开始和结束时间定义。
  • 选择的活动集合中任何两个活动都不能有时间上的重叠。
使用 Python 实现贪心算法
def activity_selection(activities):
    # 根据结束时间排序
    activities.sort(key=lambda x: x[1])
    # 初始化
    last_end_time = 0
    selected_activities = []

    # 选择活动
    for start, end in activities:
        if start >= last_end_time:  # 与最后选定的活动不冲突
  

你可能感兴趣的:(python实战开发及案例分析,python,贪心算法,开发语言,算法,数学建模,青少年编程,制造)