目录

1. 设计findcontentchildren(greedy, size)来判断出饼干可以满足多少小孩:

2. 设计carpooling(trips, capacity)判断是否一个车能接送所有旅客:

3. 旅游路线问题

4. 背包问题

5. 电台问题


1. 设计findcontentchildren(greedy, size)来判断出饼干可以满足多少小孩:

  • greedy为贪婪指数列表,列出每个小孩期待的饼干大小;如:greedy[1, 2]为第一个小孩期待饼干大小为1,第二个小孩期待饼干大小为2;
  • size为饼干大小列表;如:size[1, 2]为第一块饼干大小为1,第二块饼干大小为2;                   
def findcontentchildren(greedy, size):greedy.sort()size.sort()index = 0ptr = 0for g in greedy:while index<len(size) and g>size[index]:index += 1if index<len(size) and g<=size[index]:ptr += 1index += 1return ptr
print(findcontentchildren([2,1,3],[1,1]))
print(findcontentchildren([1,3],[1,2,3]))

代码解析: 

这个程序的设计方式就是先对greedy和size列表排序,然后使用g遍历greedy列表和size列表作比较,如果size[index]小于g,且index小于size的长度,index必须加1,相当于指标往后移。当找到size[index]大于g,表示可以满足一个小孩,就可以离开while循环了;


2. 设计carpooling(trips, capacity)判断是否一个车能接送所有旅客:

  • trips = [num_passengers, start_location, end_location]:num_passengers是旅客数量, start_location是上车站, end_location是下车站;
  • capacity是车辆的容量;
def carpooling(trips, capacity):car = []for n, start, end in trips:car.append((start, n))car.append((end, -n))car.sort()people = 0for c in car:people += c[1]if people>capacity:return Falsereturn Trueprint(carpooling([[2,1,6],[3,3,8]],4))
print(carpooling([[2,1,6],[3,3,8]],5))
print(carpooling([[3,2,6],[3,6,9],[8,3,9]],11))

3. 旅游路线问题

有一个旅游者想一次性游览这6个城市,请设计贪心算法,输入任意起点城市,都能得出最适当的拜访路线和最后的旅行距离:

def greedy(graph, cities, start):visited = []visited.append(start)start_i = cities.index(start)distance = 0for outer in range(len(cities)-1):graph[start_i][start_i] = INFmin_dist = min(graph[start_i])distance += min_distend_i = graph[start_i].index(min_dist)visited.append(cities[end_i])for inner in range(len(graph)):graph[start_i][inner] = INFgraph[inner][start_i] = INFstart_i = end_ireturn distance,visitedINF = 9999
cities = ['北京','天津','西安','武汉','上海','广州']
graph = [[   0, 132,1120,1200,1463,1888],[ 132,   0,1182,1367, 957,2100],[1120,1182,   0,1035,1509,1950],[1200,1367,1035,   0, 686,1030],[1463, 957,1509, 686,   0,1705],[1888,2100,1950,1030,1705,   0]]
start = input('出发城市:')
dist, visited = greedy(graph, cities, start)
print('旅游顺序:',visited)
print('旅游距离:',dist)

4. 背包问题

一个人有一个可以装10千克货物的背包,他到一个市场想最大价值的带走他想要的东西,请你用贪心算法帮他:

  • '手表':(1500,1),
  • '手机':(3500,7),
  • '平板':(3800,5),
  • '电脑':(4000,8),
  • '相机':(2000,1),
  • '眼镜':(1200,1.2),
  • '耳机':(1000,1)
def greedy(things):length = len(things)things_list = []things_list.append(things[length-1])weights = things[length-1][1][1]for i in range(length-1, -1, -1):if things[i][1][1] +weights <= max_weight:things_list.append(things[i])weights += things[i][1][1]return things_listthings = {'手表':(1500,1),'手机':(3500,7),'平板':(3800,5),'电脑':(4000,8),'相机':(2000,1),'眼镜':(1200,1.2),'耳机':(1000,1)}
max_weight = 10
th = sorted(things.items(), key = lambda item:(item[1][0]/item[1][1]))
t = greedy(th)
print('贪婪选择下的商品如下:')
for i in range(len(t)):print(*t[i])

5. 电台问题

某组织想要通过电台进行全国大部分省份的通信,而电台有地域性限制,且有一定成本,所以想用尽可能少的电台进行覆盖:

  • 电台1:湖北,安徽,江西;
  • 电台2:河南,湖北,湖南;
  • 电台3:浙江,安徽,江苏;
  • 电台4:安徽,山东,江西;
  • 电台5:江苏,天津,北京;
  • 电台6:广西,广东,福建;
  • 电台7:甘肃,山西,江西,山东;
def greedy(radios, cities):greedy_radios = set()while cities:greedy_choose = Nonecity_cover = set()for radio, area in radios.items():cover = cities & areaif len(cover) > len(city_cover):greedy_choose =radiocity_cover = covercities -= city_covergreedy_radios.add(greedy_choose)return greedy_radioscities = set(['北京','天津','湖北','安徽','江西','河南','湖南','浙江','江苏','山东','江西','广西','广东','福建','甘肃'])
radios ={}
radios['电台1']=set(['湖北','安徽','江西'])
radios['电台2']=set(['河南','湖北','湖南'])
radios['电台3']=set(['广西','广东','福建'])
radios['电台4']=set(['浙江','安徽','江苏'])
radios['电台5']=set(['安徽','山东','江西'])
radios['电台6']=set(['江苏','天津','北京'])
radios['电台7']=set(['甘肃','山西','江西','山东'])
print(greedy(radios, cities))

算法技巧专栏

https://blog.csdn.net/weixin_53919192/category_11761989.htmlhttps://blog.csdn.net/weixin_53919192/category_11761989.html

python算法技巧——贪心算法练习及掌握相关推荐

  1. python贪心算法最短路径_dijkstra算法(贪心算法)——解决最短路径问题

    最短路径 给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径 基本思想 1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V ...

  2. 3.Python算法之贪心算法思想

    贪心算法 1.什么是贪心算法 2.贪心算法的特点和思路 3.贪心算法的缺点 4.贪心算法的基本思路 5.贪心算法的基本过程 6.贪心算法解决"找零"问题 6.贪心算法解决" ...

  3. 回溯算法和贪心算法_回溯算法介绍

    回溯算法和贪心算法 回溯算法 (Backtracking Algorithms) Backtracking is a general algorithm for finding all (or som ...

  4. 五大算法之三--贪心算法

    一.基本概念:        所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解.      贪心算法没有固定的 ...

  5. java调度问题的贪心算法_贪心算法——换酒问题

    知识回顾 贪心算法 (greedy algorithm),又称贪婪算法. 是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法. 贪心算法在 有最优子 ...

  6. 任务分配算法c语言程序,程序员算法基础——贪心算法

    原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...

  7. 数据结构与算法之美(十四)算法思想——贪心算法

    目录 贪心算法介绍 贪心算法例子 1. 背包 2. 分糖果 3. 钱币找零 4. 区间覆盖 5. 区间覆盖的延伸:任务调度.教师排课 贪心算法经典应用 1. 霍夫曼编码 2. 最小生成树算法 3. 最 ...

  8. 贪心算法适用条件_【算法】贪心算法

    概念&&介绍 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解.所以说只有证明局部最优解在全局最优解 ...

  9. 趣学算法系列-贪心算法

    趣学算法系列-贪心算法 声明:本系列为趣学算法一书学习总结内容,在此推荐大家看这本算法书籍作为算法入门, 原作者博客链接,本书暂无免费电子版资源,请大家支持正版,更多的案例分析请查看原书内容. 第二章 ...

最新文章

  1. 技术人员关注的几个优质公众号
  2. android中SimpleAdapter、ArrayAdapter的用法以及继承了ListActivity的设置适配器的方法...
  3. IOS - 快速入门
  4. 数论--中国剩余定理模板
  5. VM虚拟机 安装OS X 错误vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123
  6. android+水滴粘性动画,Android控件实现水滴效果
  7. c语言给定一个非空整数数组_C程序检查给定整数的所有位是否为一(1)
  8. 网络基础---IP编址
  9. MySQL之 XtraBackup 备份
  10. 给ApplicationContext容器中添加组件的方法(@Bean的使用)
  11. OnSetCursor 及改变鼠标形状
  12. GameSalad:让每个人都变成游戏开发者
  13. linux打开pkg文件怎么打开,linux中怎么打开tar.rar.gz文件
  14. r语言 面板数据回归_R语言-面板数据分析步骤及流程-
  15. WIN10 VS2019 编译Cyrus SASL
  16. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
  17. Office自定义功能区各功能图标间隔太大,与之前排版不一样,如何减少间隔距离?
  18. 【数学】凸函数与詹森不等式(琴生不等式)解析
  19. python 将函数封装成pyd或者so文件,调用该文件
  20. Fish vs. Zsh vs. Bash以及为什么要改用Fish

热门文章

  1. 量化交易如何进行回测+模拟+实盘?包括哪些回测框架?
  2. 智能井盖安全监测系统,提高城市井盖安全性
  3. 20210307 matlab画负频率波特图,负序
  4. rm -rf /var/lib/docker 设备或资源忙问题处理
  5. jquery对div的移动以及改变大小
  6. 大坝安全监测系统是由什么组成的?
  7. Switch版初音 mega39去渲染 获得PS4版初音街机效果说明
  8. 宏定义(无参宏定义和带参宏定义)
  9. 图解企业6S管理体系及如何推行6S管理?
  10. 趣味程序设计_抢n游戏(总结规律)