RS算法复杂度分析

这篇博客我们接着上一篇博客的内容,我们来分析一下RS算法的复杂度。从上篇博客的lemma 1我们看到如果每一次都选择当前集合的中位数作为pivot,则RS算法复杂度为\mathcal{O}(n)。但是实际上我们随机选择的话并不能保证总是能选到中位数。通常意义上,这样一个pivot被认为足够好,即该pivot落在当前集合的25%-75%之间。

不难发现,如果我们选择了一个足够好的pivot,那么当前的集合在下一次迭代过程中任务规模至少下降25%。所以为了方便起见,我们设X_{j}为一个代表第j次选到足够好的pivot所需要的随机挑选的次数的随机变量。实际上,我们每次随机挑选,我们的pivot足够好的概率很容易算出来为1/2。

注意,不管我们选择的pivot好不好,实际上计算任务都是会下降的,只是下降的幅度不同而已。但是我们计算复杂度的上界的时候,我们可以做这样的一个假设,就是我们的计算规模只在我们选择的pivot足够好时才下降25%,否则就不变,且这样选择一次的复杂度我们也记录下来。这样我们算出来的复杂度就一定是一个上界。

所以,当我们第j次选到足够好的pivot时,此时的计算规模最多不会超过(\frac{3}{4})^{j}n,而在RS中,我们将输入数据根据pivot分成两部分的时候,消耗的复杂度不超过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值