2018.2.25-26 algo part3 greedy algorithm

这周讲初级的greedy alorithm,greedy algorithm是一种算法思想,思路是每一步都做在当时看上去是最优的事情,那么很多步下来,最后得到的方案可能也是个比较不错的方案(虽然可能不是最优)。之前接触过的knapsack problem和dijkstra‘s algorithm都是greedy algorithm的体现。

先讲的一个问题是scheduling application,就是说有一系列事务需要处理,每件事物有各自的优先级和处理时间,那么如何得到一个最优的schdule方案,使得每件事物的(优先级*完成时间)之和为最小。显而易见,这个问题很有实际意义啊:以前去主楼报账或者去学校打印店打印的时候就饱受不合理的schedule之苦,妈的明明我只是打印一两页纸,为什么要等前面那么多人打印完毕业论文才能轮到我?有了greedy algorithm这个问题就可以解决了,我们对每件事物按照(优先级/处理时间)降序排列就可以了。

然后是最小生成树的问题(MST),讲了Prim的MST算法,其实这个算法学图论的时候就学过,因为方法太直观了所以印象还挺深的。这个算法是处理无向有权图的最小生成树,过程就是先找一个最小权的边,然后以这个边为基地向外延伸,每一步寻找一遍所有不在本方基地的vertex,如果某个vertex连到在本方基地的某一vertex的edge的权重如果是当前能找到的最小值,那么就把这个点和这个边拉入本方。重复进行这一步骤,直到所有点都被拉入本方为止。这个算法是O(MN)的,不过和dijkstra一样,如果用heap来完成extract min的动作的话,可以优化到O(m*lg(n))。

作业就是实现scheduling和Prim,不难。

原文地址:https://www.cnblogs.com/dynasty919/p/8479946.html

时间: 2024-11-23 03:50:08

2018.2.25-26 algo part3 greedy algorithm的相关文章

2018.8.25 练习赛

T1 试卷 题面: 试卷(paper .cpp/.in/.out) 1s 512MB 题目描述 THH为了回答SF之间,决定在之后的m天中刷很多理综卷子,于是他收集到了 n套理综试卷,每套试卷鄒是不同的. 为了体现概率的根本性,THH 决定随机选择一一个刷题方案,但是为了不让自己某一天太过无聊,他要求每天至少要刷一套试卷,同时为了不让自己过度劳累,他决定这n套题不需要全部刷完.THH当然想知道,总共有多少种可能的刷题方案. THH当然知道答案,但是他希望你帮他验证一下,由于THH可能会刷很多题,

贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)

克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikipedia上的那个.很清晰且直观. 首先第一步,我们有一张图,有若干点和边 例如以下图所看到的: 第一步我们要做的事情就是将全部的边的长度排序,用排序的结果作为我们选择边的根据.这里再次体现了贪心算法的思想.资源排序,对局部最优的资源进行选择. 排序完毕后,我们领先选择了边AD. 这样我们的图就变成了 第

2014年4月25~26日,杨学明老师《产品测试管理高级实务培训》公开课在上海成功举办!

2014年4月25~26日,<打造高效率产品测试体系-产品测试管理>公开课在上海陆家嘴准时开课,来自机电.手机.IC.通信.电力.电池等企业的研发总监和测试部门经理等参加了此次培训,此次培训由研发管理资深顾问.产品测试专家杨学明先生主讲,本次课程采用全程案例分析讲解,让学员从一开始就融入到产品测试的场景中去,根据测试中所遇问题进行针对性讲解和讨论:课堂上许多企业都提出了很多高难度和有挑战性的问题,杨老师耐心地为各企业学员进行解答,很多学员代表表示对解决方案非常满意;培训结束后许多企业表示将引进

2018.4.25 18周1次课

十八周一次课(4月25日) 20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数 20.27 分发系统介绍 expect是一种能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序.根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及什么是正确的应答.它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. 我们熟知的shell编程功能虽然很强大,但是

2018.1.25 7周4次课

七周四次课(1月25日) 10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例 需求:只针对filter表,预设策略INPUT链DROP, 其他两个链ACCEPT,然后针对192.168.37.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口. 这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式.脚本内容如下: vi /usr/local/sbin/ip

2018/2/25

T1 小星星 这个题开始先弄了一个20分的暴力,只要对于每一个点来枚举父亲就行了. 然后就是开始想链的部分分,弄了一个 f[i][j][k], i 表示状压所用过的标号,集合,然后 j,k 表示这条链的两个端端点,然后枚举子集来转移,但是时间复杂的事过不了的. 然后再最后30min 想到链的做法可以直接用f[i][j]来DP,i 还是表示用了哪些标号,j表示当前这条链的开头是谁,然后枚举这条链由开头能拓展到谁就好了. 然后又80分的暴力做法就是,设计数组f[i][j][k] 表示在 i 这个节点

ebullient(2018.10.25)

结论巨好想,每一次操作可以看作把一个b往前移一位,另一个b往后移一位,逆序对个数不改变,判断即可做第一问. 此处代码仅给出第一问做法: #include<cstdio> #include<algorithm> using namespace std; int n,f[1000001],g[1000001]; char a[1000001],b[1000001]; int main() { while(scanf("%d",&n)!=EOF) { scan

2018.11.25日脉象记录

2018.11.22日改方子 变化: 柴胡从9克减为6克                 //感冒的症状减退? 天花粉15克加到30克 //这四个变化的原因都是附子+党参导致的血热,出汗,血亏,水少 大枣从45克增加到60克 //停止茯苓排水,增加大枣补血,生蒲黄凉血,继续疏通经络 茯苓12克减为0克   //左右手整体脉象变成洪大中空,说明热损耗了津液 生蒲黄9克,凉血   //天花粉增量是消除肺中积聚的热,肾虚第一就要保肺,使得肺能降雨给肾,补肾阴 增加: 炒芥子9克 归肺经,温中散寒,利气

2018.12.25|区块链技术头条

今日区块链技术头条 1.观点 | "区块链"不过是唬人的空壳子 2.以太坊钱包开发系列3 - 展示钱包信息及发起签名交易 3.干货 | Casper CBC 简要说明 4.区块链技术指南 | 链码如何使用?:实现对链码的安装.实例化及调用 5.区块链技术指南:以最快的方式完成应用通道的创建 6.区块链开发干货分享:共识机制 7.盘点:信誓旦旦的十大「谎言」,正重建一个「独立思考」的区块链世界 8.区块链史上最贵:2018年3千万人交了5万亿元学费,上这10堂课 9.从Thunderel