2018.2.25-26 algo part3 greedy algorithm

Posted dynasty919

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,不难。

以上是关于2018.2.25-26 algo part3 greedy algorithm的主要内容,如果未能解决你的问题,请参考以下文章

第四周:卷积神经网络 part3

Linux基础知识part3

Django 文档,part3 理解问题

存储结构与管理硬盘(part3)

结对作业——四则运算 Part3. 对于结对编程的总结与思考

CKKS Part3: CKKS的加密和解密