第17章 平摊分析

算法导论书籍学习

17.1   聚集分析

算法导论书籍学习

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

两个例子:

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

算法导论书籍学习

 

 

第二个例子

 

一个二进制加法器的操作

算法导论书籍学习

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

 

 

 

 

 

第24章 单源最短路径

24.1

 

24.3  Dijkstra 算法

算法伪代码

算法导论书籍学习

 

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

算法导论书籍学习

算法复杂度分析

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

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

算法导论书籍学习

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

这一块就涉及图论及其算法了,有点复杂,搞不来,各种类型的图都可以考虑啥的。

 

 

 

 

 

 

相关文章: