我是靠谱客的博主 威武哑铃,最近开发中收集的这篇文章主要介绍条件期望4,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

条件期望例题----快排算法的分析

快速排序算法的递归定义如下:
有n个数( n ≥ 2 ngeq 2 n2), 一开始随机选取一个数 x i x_i xi, 并将 x i x_i xi和其他n-1个数进行比较, 记 S i S_i Si为比 x i x_i xi小的元素构成的集合, S i ˉ bar{S_i} Siˉ为比 x i x_i xi大的元素构成的集合, 然后分别对 S i S_i Si S i ˉ bar{S_i} Siˉ进行排序.
如果集合中元素个数等于2, 则简单比较即可, 如果大于2, 则重复上述过程.
我们选取整个排序过程中的比较次数的期望作为算法效率分析的指标. 记 M n M_n Mn为在n个不同元素的集合中, 实行快速排序算法所需要的比较次数的均值, 易知 M 0 = M 1 = 0 , M 2 = 0.5 M_0 = M_1 = 0, M_2 = 0.5 M0=M1=0,M2=0.5.
易知
M n = ∑ j = 1 n E [ 比较次数 ∣ 初始随机取的元素为集合中的第 j 个值 ] 1 n M_n = sum_{j=1}^nE[比较次数|初始随机取的元素为集合中的第j个值]frac{1}{n} Mn=j=1nE[比较次数初始随机取的元素为集合中的第j个值]n1
如果初始选的值是所有元素中第 j j j小的, 则对应的 S S S集合就有 j − 1 j-1 j1个元素, S ˉ bar{S} Sˉ就有n-j个元素, 因为第一次选取之后一定会比较 n − 1 n-1 n1次, 所以可得
M n = ∑ j = 1 n ( n − 1 + M j − 1 + M n − j ) 1 n = n − 1 + 1 n ∑ k = 1 n − 1 M k + 1 n ∑ m = n − 1 1 M m = n − 1 + 2 n ∑ k = 1 n − 1 M k begin{split} M_n &= sum_{j=1}^n(n-1 + M_{j-1} + M_{n-j})frac{1}{n} \ &=n-1 + frac{1}{n}sum_{k=1}^{n-1}M_k + frac{1}{n}sum_{m=n-1}^{1}M_m \ &=n-1 + frac{2}{n}sum_{k=1}^{n-1}M_k end{split} Mn=j=1n(n1+Mj1+Mnj)n1=n1+n1k=1n1Mk+n1m=n11Mm=n1+n2k=1n1Mk
所以
n M n = n ( n − 1 ) + 2 ∑ k = 1 n − 1 M k nM_n = n(n-1) + 2sum_{k=1}^{n-1}M_k nMn=n(n1)+2k=1n1Mk
易知
( n + 1 ) M n + 1 = n ( n + 1 ) + 2 ∑ k = 1 n M k (n+1)M_{n+1} = n(n+1) + 2sum_{k=1}^{n}M_k (n+1)Mn+1=n(n+1)+2k=1nMk
所以
( n + 1 ) M n + 1 − n M n = n ( n − 1 ) = 2 n + 2 M n (n+1)M_{n+1} - nM_n = n(n-1) = 2n+2M_n (n+1)Mn+1nMn=n(n1)=2n+2Mn

( n + 1 ) M n + 1 = 2 n + ( n + 2 ) M n (n+1)M_{n+1} = 2n+(n+2)M_n (n+1)Mn+1=2n+(n+2)Mn
所以
M n + 1 = 2 n n + 1 + n + 2 n + 1 M n M_{n+1} = frac{2n}{n+1} + frac{n+2}{n+1}M_n Mn+1=n+12n+n+1n+2Mn

两边同除以 ( n + 2 ) (n+2) (n+2), 有
M n + 1 n + 2 = 2 n ( n + 1 ) ( n + 2 ) + M n n + 1 frac{M_{n+1}}{n+2} = frac{2n}{(n+1)(n+2)} + frac{M_n}{n+1} n+2Mn+1=(n+1)(n+2)2n+n+1Mn
迭代这个过程, 有
M n + 1 n + 2 = 2 n ( n + 1 ) ( n + 2 ) + ( 2 ( n − 1 ) n ( n + 1 ) + M n − 1 n ) = ⋯ = 2 ∑ k = 0 n − 1 n − k ( n + 1 − k ) ( n + 2 − k ) ( M 1 = 0 ) begin{split} frac{M_{n+1}}{n+2} &= frac{2n}{(n+1)(n+2)} + left(frac{2(n-1)}{n(n+1)} + frac{M_{n-1}}{n} right) \ &=cdots \ &=2sum_{k=0}^{n-1}frac{n-k}{(n+1-k)(n+2-k)} \ &(M_1 = 0) end{split} n+2Mn+1=(n+1)(n+2)2n+(n(n+1)2(n1)+nMn1)==2k=0n1(n+1k)(n+2k)nk(M1=0)
所以
M n + 1 = 2 ( n + 2 ) ∑ i = 1 n i ( i + 1 ) ( i + 2 ) ( i = n − k ) = 2 ( n + 2 ) [ ∑ i = 1 n 2 i + 2 − ∑ i = 1 n 1 i + 1 ] ≈ 2 ( n + 2 ) [ ∫ 3 n + 2 2 x d x − ∫ 2 n + 1 1 x d x ] ( 步长为 1 的数值积分 ) ≈ 2 ( n + 2 ) l n ( n + 2 ) begin{split} M_{n+1} &= 2(n+2)sum_{i=1}^{n}frac{i}{(i+1)(i+2)} \ &(i = n-k) \ &=2(n+2)left[sum_{i=1}^{n}frac{2}{i+2} - sum_{i=1}^{n}frac{1}{i+1} right] \ &approx 2(n+2)left[ int_3^{n+2}frac{2}{x}dx - int_2^{n+1}frac{1}{x}dxright] \ &(步长为1的数值积分) \ &approx 2(n+2)ln(n+2) end{split} Mn+1=2(n+2)i=1n(i+1)(i+2)i(i=nk)=2(n+2)[i=1ni+22i=1ni+11]2(n+2)[3n+2x2dx2n+1x1dx](步长为1的数值积分)2(n+2)ln(n+2)

最后

以上就是威武哑铃为你收集整理的条件期望4的全部内容,希望文章能够帮你解决条件期望4所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部