python 经典算法之--贪心算法(Greedy Algorithm)

时间:2024-01-10 01:06:00 标签:  Python经典算法  算法  python  贪心算法  

贪心算法是一种求解最优化问题的算法,其核心思想是在每一步选择中都采取当前最好或最优的选择,以期最终达到全局最优解。在许多情况下,贪心算法能够快速地找到最优解或者近似最优解。

举例说明:

例1:找零钱问题

假设我们需要找给客户 67 分的硬币,我们可以用贪心算法来选择硬币的组合。我们有以下面值的硬币:1 分、5 分、10 分、25 分。那么问题是,我们要如何找零,使得硬币的数量最少?

根据贪心算法的思想,我们每次都选择面值最大的硬币,直到凑出总价值。因此我们首先选择 25 分硬币,再选择 25 分硬币,然后我们只需要再加上一枚 10 分硬币,1 枚 5 分硬币和 2 枚 1 分硬币即可。

下面是该问题的Python代码:

def make_change(cents):
    coins = [25, 10, 5, 1]
    coin_count = [0, 0, 0, 0]
    for i in range(len(coins)):
        while cents >= coins[i]:
            coin_count[i] += 1
            cents -= coins[i]
    return coin_count
    
print(make_change(67))

输出结果为:[2, 1, 1, 2]

例2:活动安排问题

假设我们有一个活动列表,每个活动都有一个开始时间和结束时间,我们需要从中选出尽可能多的活动,使得它们不会发生时间上的冲突。如何用贪心算法来解决这个问题?

根据贪心算法的思想,我们每次都选择结束时间最早的活动,然后将活动列表中与该活动时间冲突的活动从列表中删除,以便于后续选择活动时不会冲突。这样做的原因是,结束时间早的活动给后来的活动留下更多时间。因此我们可以用下面的Python代码来实现。

def activity_selection(start, end):
    activities = []
    activities.append(0)
    i = 0
    for j in range(len(end)):
        if start[j] >= end[i]:
            activities.append(j)
            i = j
    
    return [x+1 for x in activities[1:]]

start = [1, 3, 0, 5, 8, 5]
end = [2, 4, 6, 7, 9, 9]

print(activity_selection(start, end))

输出结果为:[1, 2, 4, 5],即选出的活动编号分别为 1、2、4 和 5。

总结:

贪心算法在许多情况下能够快速地找到最优解或者近似最优解,但并不是所有问题都适合使用贪心算法。需要根据问题的性质选择合适的算法。

来源:https://blоg.сsdn.nеt/qq_42852699/аrtiсlе/dеtаils/132761693

智能推荐

贪心算法是一种求解最优化问题的算法,其核心思想是在每一步选择中都采取当前最好或最优的选

标签:Python经典算法  算法  python  贪心算法  

贪心算法在每一次做决策时,保证当下的决策是最优的,从而使得最后的结果是最优的。455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。# 最好的选择是不要浪费饼干class So

标签:算法  贪心  python  Greedy  Algorithm算法  贪心  python  Greedy  Algorithm  

一、贪心算法 (Greedy Algorithm) 属于简单启发式算法。

标签:算法  贪心算法  启发式算法  算法  

1.282. 石子合并 - AcWing题库 题目简单说明:将·1

标签:算法  

正所谓贪心不足蛇吞象 其大意是:从前有一个很穷的人救了一条蛇的命&#x

标签:c++  贪心算法  算法  动态规划  c++  青少年编程  

1 贪心算法的思想         Linear Deterministic G

标签:图分区问题  算法  贪心算法  

贪心算法基本概念: 贪心的本质是通过选取局部最优达到全局最优。

标签:算法  leetcode  python  

122. Best Time to Buy and Sell Stock II

标签:java  算法  开发语言  

一、什么是贪心算法 贪心算法:一种在每次决策时,

标签:算法  学习  贪心算法  

贪心

标签:c++  贪心算法  c++  算法  

4.更多练习题 4)

标签:leetcode(c++)  贪心算法  leetcode  算法  c++  

持续更新中........................ 455. 分发饼干

标签:leetcode  leetcode  

猜你喜欢

'''一、具有贪心选择结构 复杂

标签:贪心算法  python  算法  数据结构  pycharm  

课前思考:贪心是什么?贪心如何“贪”? 课

标签:算法  贪心算法  

860.柠檬水找零 情况一&#xff1

标签:贪心算法  算法  

什么是贪心 贪心的本质是选择每一阶段的局部

标签:贪心算法  算法  leetcode  

找零钱问题(难度系数为3

标签:贪心算法  算法  

背包问题 时间限制: 3000 ms  |  内存限制&#xff1

标签:贪心算法  算法  

乘船问题 描述

标签:贪心算法  c++  算法  

活动地址:21天学习挑战赛

标签:# 算法之路  经典算法  力扣题解  双指针  java  

贪心算法(Greedy Algorithm)是一种常用的算法策略&#xf

标签:贪心算法  c语言  算法  

相关问题

相关文章

热门文章

推荐文章

相关标签