随机版的快速排序分析方法
来源:互联网 发布:住建部bim数据库 编辑:程序博客网 时间:2024/06/11 07:25
随机版的快速排序(Randomized Quicksort)。
- 运行时间不依赖于输入的排序情况
- 最坏情况仅由随机数的生成决定
通常的做法是随机地选择主元(pivot)。
T(n)为渐近运行时间,其期望值(Expectation)为E[T(n)],我们希望对所有的输入,找出这个期望值。
对k=0,1,2,...,n-1,我们定义一个0-1随机变量X_k:
X_k = 1 // 如果PARTITION分割成k:n-k-1
0 // 如果不是的话
X_k的期望E[X_k] = 1*Pr{X_k = 1} + 0*Pr{X_k=0} = Pr{X_k=1} = 1/n。而T(n)可以写成:
这个递归式有n种情况,我们可以借助0-1变量来处理:
当确定了其中的一个划分方式k:n-k-1时,有X_k=1, X_1,X_2,,,,,,X_k-1,X_k+1,,,,,这些全为0.即下面的式子可以表示上面的n条式子
这样E[T(n)]可以写成:
因为E[T(0)]=Theta(1),E[T(1)]=Theta(1),(T(n)为渐近运行时间,当只有0个或者1个数字时,可以在theta(1)时间内完成排序)为了计算方便,将最后一个和式中的k=0,k=1吸收到Theta(n)中去(只是将后一项的常系数变大一些):
剩下的就是使用替换法证明E[T(n)] <= anlgn,a>0。这里先证明基本情况,当a取足够大的值,而k取足够小的值,则可以实现下面的式子成立。即
E[T(k)] <= aklgk在a,k取合适值时成立(已知条件,意即假设这个条件是成立的,然后去证明这个条件确实成立,则结论是正确的,抽象,但是,是对的。举个简单的例子,不妨猜测E[T(k)] <= aklgk成立,原先我们不知道它是不是成立,但是不妨先假设它成立,然后,将它代入式子的右端,通过推导,如果推出的结果是左端E[T(n)] <= anlgn成立,则说明我们一开始的猜测是正确的)(1)
这里可以看出我们将k=0,1吸收到Theta(n)中的好处,因为lg0无法处理,lg1=0。我们还需要用到一个事实,它的证明见点击打开链接
将E[T(k)]代入E[T(n)]可得:用(1)式代入E[T(k)]
- 随机版的快速排序分析方法
- 快速排序的改进-随机快速排序
- 快速排序 & 随机数的生成方法 & 随机快排
- 随机的快速排序算法
- 快速排序 与 随机快速排序 算法分析
- 改良版随机快速排序
- 快速排序(随机版)
- 带时间记录的快速排序&随机快速排序
- 随机选择策略的快速排序
- 随机快速排序的java代码
- 随机快速排序的代码实现
- 随机的快速排序 ,对于监视哨,采用随机选择
- 快速排序算法的C++实现及随机数组的产生方法
- 随机快速排序
- 随机快速排序
- 随机优化快速排序
- 随机快速排序
- POJ_随机快速排序
- 单例模式代码示例
- ftok 函数 (综合版整理)
- eCos、RTEMS、RT-Thread、FreeRTOS在中文书籍方面的比较
- java类中代码加载顺序
- hdu1421搬寝室【动态规划】
- 随机版的快速排序分析方法
- Java Web开发中各种数据库连接方式速查表
- 重装MySQL时出现异常
- Linux时间函数
- CC2530 定时器T1
- Linux中link,unlink,close,fclose详解
- 守护进程
- 图像处理代码
- Eclipse中设置编码的方式