写出贪心算法求活动安排问题的python的代码
时间: 2023-10-28 10:12:21 浏览: 72
Sure! 下面是求活动安排问题的 Python 代码,采用贪心算法进行求解:
```python
# 定义函数来贪心求解活动安排问题
def activity_selection(start, finish):
n = len(finish)
i = 0
# 第一个活动总是被选择
print("Activity", i+1, "has been selected.")
# 其余的活动按照结束时间排序
for j in range(n):
# 如果下一个活动的开始时间晚于前一个活动的结束时间,选择该活动并输出
if start[j] >= finish[i]:
print("Activity", j+1, "has been selected.")
i = j
return
# 测试代码
start = [1, 3, 0, 5, 8, 5]
finish = [2, 4, 6, 7, 9, 9]
activity_selection(start, finish)
```
希望能够帮到你!
相关问题
用贪心算法写出01背包问题基于python代码
好的,下面是用贪心算法解决01背包问题的python代码实现:
```python
# 物品类
class Item:
def __init__(self, weight, value):
self.weight = weight
self.value = value
# 按照单位重量的价值从大到小排序
def cmp(item):
return item.value/item.weight
# 01背包问题贪心算法
def knapsack_greedy(items, W):
items.sort(key=cmp, reverse=True) # 按照单位重量的价值从大到小排序
total_value = 0 # 总价值
for item in items:
if item.weight <= W: # 若物品可以全部放入背包
total_value += item.value
W -= item.weight
else: # 若物品放不完,则将部分物品放入背包中
total_value += item.value * W / item.weight
break
return total_value
# 测试代码
if __name__ == '__main__':
W = 50 # 背包容量
items = [Item(10, 60), Item(20, 100), Item(30, 120)] # 物品重量和价值
max_value = knapsack_greedy(items, W) # 计算最大价值
print("最大价值为:", max_value)
```
以上代码中,我们定义了一个物品类,包含物品的重量和价值,然后实现了一个按照单位重量的价值从大到小排序的比较函数,最后实现了一个贪心算法的函数,计算出最大价值。最后在 main 函数中进行测试,输入背包容量和物品的重量和价值,输出最大价值。
写出贪心算法和递归算法的代码
好的,这里提供一个简单的Python示例,分别展示了一个经典的找零钱问题的递归算法和贪心算法。假设我们有一个无限量的整数数组`coins`表示可用的硬币面额,以及一个整数`target`作为目标金额。
**贪心算法:**
```python
def greedy_change(coins, target):
if target == 0:
return []
min_coins = [0] + [float('inf')] * len(coins)
for i, coin in enumerate(coins):
for j in range(i+1, len(min_coins)):
min_coins[j] = min(min_coins[j], min_coins[i] + 1)
return min_coins[target]
# 使用示例:[1, 5, 10],目标金额23
coins = [1, 5, 10]
target = 23
print(greedy_change(coins, target))
```
这个算法尝试将尽可能少的硬币加在一起以达到目标金额,但并不保证是最优解。
**递归算法:**
```python
def recursive_change(coins, target, n=0, result=[]):
if target == 0:
return result
elif target < 0 or n >= len(coins):
return result
else:
# 试探是否添加当前面额
with_coins = recursive_change(coins, target - coins[n], n, result+[coins[n]])
without_coins = recursive_change(coins, target, n+1, result)
# 如果不添加更节省,返回不添加的结果
if len(with_coins) <= len(without_coins):
return with_coins
else:
return without_coins
# 使用示例同上
result = recursive_change(coins, target)
print(result)
```
递归算法会尝试所有的可能性,直到找到一个满足条件的解。
请注意,这两个代码片段都假设了有足够的硬币供选择。在实际应用中,你可能需要加入错误处理代码,如检查输入的有效性和是否有足够的硬币。
阅读全文