社区
数据结构与算法
帖子详情
●算法复杂度
penwen
2004-01-09 10:28:06
有n个数组成的序列排序,在最坏情况下比较次数为f,证明f=O(nlgn)
...全文
74
8
打赏
收藏
●算法复杂度
有n个数组成的序列排序,在最坏情况下比较次数为f,证明f=O(nlgn)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GSK168
2004-01-09
打赏
举报
回复
MARK!
dengsf
2004-01-09
打赏
举报
回复
建立一棵决策树,其中非叶子节点表示“两个数比较”,连线表示上层节点的比较结果。
叶子节点表示,根据从根节点到该叶节点的比较轨迹,判断出来的 排序结果。
比如当比较3个数,分别是 a1,a2,a3。那么可以构建如下决策树:(a1:a2 > 表示 a1>a2; 最终结果从大到小排列)
a1:a2
/> \<=
a2:a3 a1:a3
/> \<= /> \<=
a1a2a3 a1:a3 a2a1a3 a2:a3
/> \<= /> \<=
a1a3a2 a3a1a2 a2a3a1 a3a2a1
叶子节点是n个数的一个排列,显然,会出现所有的排列。
所以,即使是最好的决策,决策树的叶子数必然 >= n!
注意决策树是完全二叉树,
所以,即使是最矮的决策树,其高度 h 也满足:
2^h >= n! > (n/e)^n
h >= nlogn - nloge
因此,排序的最优效率是 O(nlogn).
最坏情况下的效率 >= 最优情况下的效率 = O(nlogn)
gnefuil
2004-01-09
打赏
举报
回复
用快速排序,合并排序,复杂度都可以到O(nlogn)
qiu_xiaolin
2004-01-09
打赏
举报
回复
在最坏情况下,冒泡法跟快速分类法都是0(N*N)
快速分类法的平均特性才是0(nlogn)
短歌如风
2004-01-09
打赏
举报
回复
摘自严版《数据结构》:
由于含n个记录的序列可能出现的初始状态有n!个,则描述n个记录排序过程的判定树必须有n!个叶子结点。因为,少一个叶子,则说明尚有两种状态没有分辨出来。我们已经知道,若二叉树的高度为h,则叶子结点的个数不超过2^(h-1),反之,若有u个叶子结点,则二叉树的高度至少为upper_int(log(2,u)) + 1。这就是说,描述n个记录排序的判定树上必定存在一条长度为upper_int(log(2,n!))的路径。由此得到下述结论;任何一个藉助“比较”进行排序的算法,在最坏情况下所需进行的比较次数至少为upper_int(log(2,n!))。然而,这只是一个理论上的下界,一般的排序算法在n>4所需进行的比较次数均大于此值,直到1956年.H.B.Demuth首先找到了对五个数进行排序只需要七次比较的方法之后,Lester Ford和Selmer Johnson将其推广,提出了归并插入排序,在n<11时所用的比较次数和upper_int(log(2,n!))相同。根据斯待林公式,有O(lg(n!))=o(nlqn),上述结论从数量级上告诉我们,藉助于“比较”进行排序的算法在最坏情况下能达到的最好的时间复杂度为0(nlgn)。
dengsf
2004-01-09
打赏
举报
回复
我想楼主那个 O 应该是小写的 o 才对 :)
gnefuil
2004-01-09
打赏
举报
回复
to dengsf
这样只能证明算法复杂度的下界是O(nlogn)
就如你最后一行写的
“最坏情况下的效率 >= 最优情况下的效率 = O(nlogn)”
最坏情况是多少呢?是不是也能够到nlogn?
寻开心
2004-01-09
打赏
举报
回复
?
使用冒泡排序 时间是O(N*N) > O(nlgn)啊
程序员数据结构笔记 知识 能力 过程
word文档 知识: 1.数据结构中对象的定义,存储的表示及操作的实现. 2.线性:线性表、栈、队列、数组、字符串(广义表不考) 树:二叉树 ...
●
算法
评价(时间和空间
复杂度
,主要考时间
复杂度
)
基于mmse的信道估计
算法
示为Rm=UAU的形式,这样可以显著降低MMSE的计算
复杂度
。这里U为酉矩阵, A=dlag(2,3,…,2)为由Rm的特征值构成的对角阵。由此可得 MMSE U H (15) 这里△n为 +(B/M1),k=1…,m构成的对角阵,为A的前m个特征值,通常...
八大排序
算法
总结(含代码)
不稳定的排序
算法
:快速排序、希尔排序、堆排序、选择排序(简简记记::快快些些选选堆堆) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 当n较大,则应采用时间
复杂度
为O(nlogn)的...
算法
从入门到精通系列——
算法
复杂度
(1+n)*n/2
算法
从入门到精通系列之02_
算法
复杂度
(一) 一、概述
算法
复杂度
又分为时间
复杂度
和空间
复杂度
。本节主要是介绍时间
复杂度
。时间
复杂度
表示计算机执行一段
算法
所需要的时间。对于计算机来说,解决同一个...
算法
从入门到精通系列之02_
算法
复杂度
(一)
算法
复杂度
又分为时间
复杂度
和空间
复杂度
。本节主要是介绍时间
复杂度
。时间
复杂度
表示计算机执行一段
算法
所需要的时间。对于计算机来说,解决同一个问题不同的
算法
,所需时间越少的
算法
越优(不考虑空间问题),所以...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章