概率分析与随机算法小结

来源:互联网 发布:两年工作经验的程序员 编辑:程序博客网 时间:2024/06/18 09:45

起因:对于一段特定的程序,我们想要准确分析它的运行时间,不得不考虑到各种情况的输入。

方法:现在有两种方法用来处理该问题,一种是概率分析,另一种是随机算法

(1)概率分析着重于对函数(或者某个程序段)的输入的分布进行分析,由此计算程序的平均情况运行时间

(2)随机算法本质上与概率分析刻画的内容是同一类型,但是随机算法转换了思路,将不再考虑输入的分布,而将输入的随机性用程序内部的一个随机发生器来体现,一般情况下体现在在函数内部随机的生成一个输入,这样在每次程序运行时,输入都会不一样,以此来体现随机性,此时计算的运行时间我们称为期望运行时间

随机算法中的随机化方法:在书中第70到71页指出了两种方法;

(1)依据优先级进行排序:

PERMUTE-BY-SORTING(A)1n = A.length2let P[1..n] be a new array3for i = 1 to n4P[i] = RANDOM(1, n^3)//为了让产生的优先级尽可能的唯一5sort A, using P as sort keys
该方法先个数组中的每个元素生成一个优先级,然后依据生成的优先级对数组进行排序。

(2)原址排列给定数组:

RANDOMIZE-IN-PLACE(A)1n = A.length2for i = 1 to n3swap A[i] with A[RANDOM(i, n)]
该方法相当于拿n个不同的球(元素)来对n个位置(数组)进行放置,放置后不能拿回,每次取球都是随机的。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

对于算法导论的学习,可能改变一些,因为它内容太丰富,所以以后将选取一些有代表性的,重要的内容进行较为深入的分析,这样少一点,精细一点可能更好。

加油!!!微笑