会场安排问题(贪心算法,Ruby)
来源:互联网 发布:中转国际机票 知乎 编辑:程序博客网 时间:2024/05/18 02:04
感觉每一个算法都能要我老命,一个贪心算法又是花了老长时间,浮躁要命啊
方案:每次从剩下未安排的会议中选择具有最早结束时间且不会与已安排的的会议重叠的会议来安排。
先贴代码,也可查看我的GitHub
#_*_ coding:utf-8 _*_@begin = [1,3,0,5,3,5,6,8,8,2,12]#结束时间要按升序排列@end = [4,5,6,7,8,9,10,11,12,13,14]@ary = Array.new(11,false)#@result = []def greedySelector(beginAry,endAry,ary) ary[0] = true j,i = 0,1 while i < beginAry.size if beginAry[i] >= endAry[j] ary[i] = true j = i else ary[i] = false end i += 1 endend#def greedySelector2(beginAry,endAry) ##选出最早结束的回忆,如果有两个同时结束,那可能就很尴尬了 #i = endAry.index(endAry.min) #@result << i #将第一个会议输出 #j = 0 #while j < beginAry.size #if j == i #j += 1 #next #end #if endAry[i] <= beginAry[j] #@result << j #输出符合条件的会议 #i = j #end #j += 1 #end#end#puts "使用自己理解的方法,结果如下:"#greedySelector2(@begin,@end)#puts @result.join(' ')puts "参照课本改写的方法,结果如下:"greedySelector(@begin,@end,@ary)@ary.each_with_index do |item,index| if item print "#{index} " endendputs ""
各位看官,我自己写的等于是全部注释掉了,留着时常警示自己。
我的算法中第一步是找出结束时间中最小的那个会议,然而这并不需要,我是参考的课本,课本上对这个算法的分析有一句写的很清楚,数组是按结束时间升序排列的,所以第1个必然是第一个要开始的会议(不理解的自己想吧,我感觉解释不清,这是选这个方案的必然结果)。所以我走了弯路,我本来的想法是从混乱无序的数组中选出正确的顺序,然而并没有必要。
后来我也想过怎样设计适合无序数组的算法,其实很简单,先排序,然后就想不出了,感觉自己的思路被限制了。
今晚写的有点混乱,大家参考一下代码就好了,写这篇博客只是希望我以后分析问题的时候少些浮躁,仔细一点,不然真的会浪费很多时间,与诸君共勉!
阅读全文
0 0
- 会场安排问题(贪心算法,Ruby)
- 【贪心算法】会场安排问题
- 会场安排问题 贪心算法
- 会场安排问题贪心算法
- 贪心算法-会场安排
- 会场安排问题(贪心算法)
- 贪心算法解决会场安排问题
- 会场安排问题(贪心算法)
- 贪心算法之nyoj会场安排问题
- NTOJ-14-会场安排问题(贪心算法)
- 会场安排问题(贪心算法)
- 贪心算法作业之会场安排问题
- 贪心算法——会场安排问题
- 会场安排问题之贪心算法
- 贪心算法——会场安排问题
- 贪心算法实现会场安排问题
- 贪心--会场安排问题
- 会场安排问题【贪心】
- 最全Pycharm教程(16)——Pycharm编辑器功能之代码自动生成
- 51Nod
- NOIP模拟9.12
- linux重定向输入和输出
- mysql连接查询
- 会场安排问题(贪心算法,Ruby)
- 9. Palindrome Number
- 查看文件命令笔记
- centOs下配置防火墙
- Redis支持的五种数据类型
- unity3d 菜单项解释
- hadoop集群配置常见问题和解决方案
- 网络流模板
- 程序片段----随机数(int范围内)