快速排序平均时间复杂度O(nlogn)的推导

技术快速排序平均时间复杂度O(nlogn)的推导 快速排序平均时间复杂度O(nlogn)的推导快速排序作为随机算法的一种,不能通过常规方法来计算时间复杂度,本文记录了一种推导方法快速排序作为随机算法的一

快速排序平均时间复杂度的推导

快速排序作为一种随机算法,无法用常规方法计算时间复杂度。本文记录了一种推导方法。

快速排序作为一种随机算法,无法用常规方法计算时间复杂度。

wiki上快速排队平均时间复杂度的分析有三种,本文记录了一种推导方法。

先把伪码快速排序,方便查阅参考。

快速排序(int L,int R,int array[]){ 0

if(L=R){ 0

返回;

}

int pivot=RANDOM(L,R);

int l=L,r=R

int support _ array[array . length()]

for(I=L-R){ 0

if(I==pivot){ 0

返回;

}

else if (array[i]=array[pivot]){

support _ array[l]=array[I];

}

else {

support _ array[r-]=array[I];

}

}

support _ array[l]=array[pivot];

array-support _ array;

快速排序(L,l-1,数组);

快速排序(l 1,R,数组);

}

n是序列的长度。对于长度为n的序列,我们总共需要调用n次quicksort函数。我们提出序列中的元素与枢纽之间的比较操作(代码第8-18行,以下简称“比较”)进行统筹考虑。除了比较运算,函数每次调用的时间复杂度为O(1),设x为函数被调用n次的比较总数,快速排序的时间复杂度为t (n

以下是x的计算过程。

设ei为原序列中第几个最小的数,ej为第几个最小的数,j为I,在对原序列进行完全排序的整个过程中,每个位置都会被选中一次作为支点。Ei和ej将被比较。当且仅当在ei的子序列中,ei 1,ei 2,ej-1,ej(根据假设,这是一个非降序序列),首先在这个子序列中选择ei和ej中的一个作为pivot,否则选择它们之间的一个数字作为pivot,经过一轮比较,ei和ej将被分成两个子序列。P(ei和ej比较)=2/(j-I ^ 1)当我们使用的随机数生成算法能够保证每个数被选为枢纽的概率相等时。设Y为ei和ej的比较次数,Y=0或1,Y的期望值计算如下

\[P(Y=1)=P(e_i和e_j比较)=2/(j-i 1)

\]\[E(Y)=P(Y=1) * 1=2/(j - i 1)

\]但是,在序列中,任意两个比较时间的期望值是2/(j-I ^ 1)

X是比较的总数,那么X的预期表达式是

\[e(x)=\sum_{i=1}^{n-1}\sum_{j=i 1}^{n}2/(j-i 1)

\]后半部分的和为调和级数,调和级数的和公式如下

\[1 1/2 1/3 .1/n=ln(n 1)

\]用于计算E(x)

\[\ sum _ { j=I 1}^{n}2/(j-i 1)=2 *[ln(n-I 1)-1]=o(logn)

\]\[e(x)=\sum_{i=1}^{n-1}o(logn)=o(nlogn)

\]\[T(n)=O(n x)=O(n nlogn)=O(n nlogn)

\]此时,已经推导出快速排序的平均时间复杂度O(nlogn)。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/88688.html

(0)

相关推荐

  • Scala尾递归的跟踪调用及局限方法是什么

    技术Scala尾递归的跟踪调用及局限方法是什么这篇文章主要讲解了“Scala尾递归的跟踪调用及局限方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala尾递归

    攻略 2021年12月9日
  • 抖音粉丝多少钱一个,抖音真人粉多少钱?

    技术抖音粉丝多少钱一个,抖音真人粉多少钱?关于到现在教大家抖音真人粉购买的方法这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道教大家抖音真人粉购买的方法,小编也是

    测评 2021年11月10日
  • openwrt状态监控(openwrt实现远程管理)

    技术OpenWRT如何实现远程监听小编给大家分享一下OpenWRT如何实现远程监听,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、安装命令o

    攻略 2021年12月18日
  • 红烧肉的做法窍门,家庭版红烧肉怎么做不油腻

    技术红烧肉的做法窍门,家庭版红烧肉怎么做不油腻您好红烧肉的做法窍门,我是嘴嘴深夜食堂家庭版红烧肉只需要一坛黄酒,一块老姜,再加上盐,酱油,冰糖这几样东西,就可以做得非常好吃了,这个是跟着黄磊老师的做法做的哦1:五花肉清洗

    生活 2021年10月22日
  • windows自带画图中曲线的使用(如何根据训练的模型绘制roc曲线)

    技术怎么用WindML画个图这篇文章主要为大家展示了“怎么用WindML画个图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用WindML画个图”这篇文章吧。用WindM

    攻略 2021年12月22日
  • 过滤器和拦截器的区别有哪些

    技术过滤器和拦截器的区别有哪些这篇文章主要讲解了“过滤器和拦截器的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“过滤器和拦截器的区别有哪些”吧!Filter的使

    攻略 2021年10月28日