蓝桥杯python组备考——贪心算法

本文介绍了贪心算法在Python中的应用,包括找零钱、区间调度和最小生成树问题,以及如何在分配饼干、股票交易和最大数问题中使用贪心策略。贪心算法虽不一定能得到全局最优解,但在特定场景下能提供高效解决方案,适合蓝桥杯等竞赛练习。
摘要由CSDN通过智能技术生成

在Python中,贪心算法是一种常见的算法思想,通常用于求解最优化问题。贪心算法的核心思想是每一步都选择当前状态下的最优解,以期望最终得到全局最优解。

具体来说,贪心算法的步骤如下:
1. 确定问题的子问题结构。
2. 根据当前状态,选择局部最优解。
3. 更新状态,继续向下一步迭代。

下面举几个例子来说明贪心算法在Python中的应用:

1. 找零钱问题
假设有面额为{1, 2, 5, 10, 20, 50, 100}的硬币,需要找零n元钱。贪心算法可以先尽量多地使用面额最大的硬币,然后逐渐使用面额较小的硬币。

2. 区间调度问题
给定一系列的区间,每个区间都有开始时间和结束时间。目标是找到最多的不重叠区间。贪心算法可以按照结束时间排序,每次选择结束时间最早的区间。

3. 最小生成树问题
在一个连通的无向图中,找到一棵包含所有顶点且边权值之和最小的生成树。Prim算法和Kruskal算法都是贪心算法的应用。

在这些问题中,贪心算法可以简单、高效地求解最优解,但并不保证一定能得到全局最优解。因此,在使用贪心算法时,需要确保问题满足贪心选择性质和最优子结构性质。

下面我列举几个具体的题目,并给出相应的贪心算法解法:

1. 分配饼干
题目描述:有一组孩子和一组饼干,每个孩子有一个贪心因子,每个饼干有一个大小。只有当饼干的大小不小于孩子的贪心因子时,孩子才会满足。求最多能满足多少个孩子。

贪心解法:先对孩子和饼干按照贪心因子和大小进行排序,然后从贪心因子最小的孩子开始,尝试用最小的饼干满足他,然后继续向后满足下一个贪心因子更大的孩子。

相应代码:

def findContentChildren(children, cookies):
    children.sort()
    cookies.sort()
    
    child_ptr = 0
    cookie_ptr = 0
    satisfied_children = 0
    
    while child_ptr < len(children) and cookie_ptr < len(cookies):
        if children[child_ptr] <= cookies[cookie_ptr]:
            satisfied_children += 1
            child_ptr += 1
        cookie_ptr += 1
    
    return satisfied_children

# Example
children = [1, 2, 3]
cookies = [1, 1]
print(findContentChildren(children, cookies))  # Output: 1
 

2. 买卖股票的最佳时机
题目描述:给定一个数组,第i个元素是第i天股票的价格。只允许完成一次交易(买入和卖出一支股票),求最大利润。

贪心解法:从头到尾遍历股票价格数组,每次计算当前价格与之前最低价格的差值,更新最大利润。

 3. 最大数
题目描述:给定一组非负整数,将它们组合成一个最大的整数。

贪心解法:将所有整数转换为字符串,然后按照字符串拼接后的大小进行排序,最后将排序后的字符串连接起来即可得到最大数。

这些题目展示了贪心算法在实际问题中的应用,通过简单的贪心策略可以高效地求解复杂的优化问题。

这也是蓝桥杯常考的一种算法哦,大家可以另外找一些相关题型来练习一下,多敲敲代码!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值