算法导论书籍学习

第17章 平摊分析

算法导论书籍学习_第1张图片

17.1   聚集分析

这里的确定一个n个操作序列的总代价的上界T(n),也许某一步操作代价很大,但是平均代价很小的。该分析会被用在分析单源最短路径中的Dijkstra算法中,其朴素版本算法复杂度为O(v2+E),其中的E就是用聚集分析分析出来的。

两个例子:

第一个例子   (考虑某个出栈k个元素的操作

算法导论书籍学习_第2张图片

 

 

第二个例子

 

一个二进制加法器的操作

算法导论书籍学习_第3张图片

        我的直观感觉就是针对一个数据结构的操作分布在n步中,也许每一步的不太可能是O(1),但是用聚集分析技术,可以得到T(n)/n平均也可以得到是O(1)的。

 

 

 

 

 

第24章 单源最短路径

24.1

 

24.3  Dijkstra 算法

算法伪代码

算法导论书籍学习_第4张图片

 

算法正确性证明(非常希望掌握的能力,你怎么证明你的算法是对的?

算法复杂度分析

       对于上面的算法而言,while会进行V次,其中EXTRACT-Min(Q)的复杂度也是V,因为需要遍历所有的节点,而for循环因为聚集分析技术所以其总的是E,所以可得时间复杂度为O(v2+E),当然这是朴实的结果

    当图比较稀疏时,准确地说是

算法导论书籍学习_第5张图片

         可以使用二叉堆数据结构代替Q,进而得到时间复杂度的提升。目前最优的dijstra算法是其算法结合最小优先队列的方法,有一篇论文是《Expected Performance of  Dijkstra's Shortest Path Algorithm》,它图中显示了decrease-key operations(基于堆的最小队列)操作的预期时间复杂度的上界,其假设就是一个概率图的模型,只有在这个假设下,其使用基于堆的最小队列的dijstra算法,的decrease-key 操作有O(nlog(1+m/n)的期望复杂度,其中m为边数目,n为点数目。

         论文原文:我们的结果是由decrease-key操作的数量少的经验观察得出的。 这个观察结果可以用来解释为什么斐波那契堆的性能通常比二元堆差(例如参见[5])。 更一般而言,该观察结果可用于预测当应用于Dijkstra的算法时优先级队列的实现将如何执行。

    为了证明这个结论,需要有算法导论中概率分析的理论知识才行,暂时没看因为我已经可以在时间复杂度上超过它了。

、算法及其操作的大体框架有:

 1   输入的分布

2    算法伪代码

  算法正确性

4    算法的时间复杂度分析(最好,最坏,一般),这个跟输入分布有关系。

 

 

 

29 章 线性规划

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(算法)