贪婪算法和简单选择排序算法Python实现

本文介绍了贪婪算法和简单选择排序的概念,并通过Python代码展示了这两种算法的实现过程。贪婪算法关注每一步的最优解,而简单选择排序则在每一轮中找到最小元素并放到已排序部分的末尾。
摘要由CSDN通过智能技术生成

@人工智能学习前的算法准备(11周)](这里写自定义目录标题)

贪婪算法:贪婪算法不一定能得到最优解,它得到的是近似最优解;它的时间复杂度是O(n^2),在n较大或者很大的时候比较实用,贪婪算法是只关心当前的这一步一定要取最优或者最有利而不管后面的步骤,也就是在每一步都选择最优解。
衡量贪婪算法的好坏一是运行的速度有多快
二是它和最优解的偏差有多大。
以一道题目为例:
假设你办了个广播节目,要让全美50个州的听众都收听得到,为此,
你需要决定在哪些广播台播出,出于预算,你要力图在尽可能少的
广播台播出,现在广播台名单和其覆盖位置如下:
!)
在这里插入图片描述

while states_needed: # 当还有需要的州未覆盖的时候循环 ``
best_station = None # 存储覆盖了最多州广播台
states_covered = set() # 已经覆盖了的州的集合
# 遍历所有广播台,找出最佳广播台并且将他的覆盖州加入已覆盖的州的集合
for station, states_for_station in stations.items():
covered = states_needed & states_for_station# 计算需要覆盖的州和每个广播台覆盖的州的交集
# 如果交

贪婪算法是一种启发式算法,它在每一步选择当前看起来最优的解决方案,而不考虑整体最优解。下面是一个用Python实现贪婪算法示例: ```python def greedy_algorithm(items, capacity): # 按照性价比排序,性价比 = 价值 / 重量 items.sort(key=lambda x: x[1] / x[2], reverse=True) total_value = 0 total_weight = 0 selected_items = [] for item in items: if total_weight + item[2] <= capacity: selected_items.append(item[0]) total_value += item[1] total_weight += item[2] return selected_items, total_value # 测试 items = [('item1', 60, 10), ('item2', 100, 20), ('item3', 120, 30)] capacity = 50 selected_items, total_value = greedy_algorithm(items, capacity) print("Selected items:", selected_items) print("Total value:", total_value) ``` 在这个示例中,我们有一个物品列表,每个物品都有一个名称、价值和重量。我们希望通过贪婪算法选择一些物品,使得它们的总重量不超过给定的容量,并且总价值最大化。 在这个实现中,我们首先按照性价比(即价值除以重量)对物品列表进行排序。然后,我们逐个考虑每个物品,如果将该物品加入选择列表后总重量仍然不超过容量,我们就将该物品加入选择列表,并更新总价值和总重量。 最后,我们返回选择的物品列表和总价值。 注意:贪婪算法并不一定能得到最优解,它只能得到一个近似解。所以在使用贪婪算法时需要根据具体问题进行评估和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值