社区
数据结构与算法
帖子详情
堆排序的运行时间
windmissing
博客专家认证
2013-04-10 07:26:52
算法导论6.4-5
证明:在所有元素不同时,堆排序算法的最佳运行时间是O(nlgn)
...全文
376
3
打赏
收藏
堆排序的运行时间
算法导论6.4-5 证明:在所有元素不同时,堆排序算法的最佳运行时间是O(nlgn)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wdq347
2013-04-12
打赏
举报
回复
楼主小姑娘,你的命题抄错了,呵呵! 最好情况下,堆排序复杂度为Ω(nlgn) 即证明堆排序复杂度不会小于nlgn! 考虑堆排序的过程,弹出当前最大元素后,将最长路径序列往上拉一层,再将末尾元素放置到最长路径序列的合适位置。 可以看到,由于元素互不相同,除max-heapify的叶子结点外,其余元素均一层一层向根结点靠拢。 假设非叶子结点与根结点距离为h,则当此元素弹出时(已经被排好序),恰好被移动h次,序号为i的非叶子结点,与根结点距离为[lgi](以下论证忽略取整函数) 如果能证明有一半以上的结点,在max-heapify 中均没有作过叶子结点,则这些结点的移动总次数 S > lg1 + lg2 + ... +lg(n/2) ≈ (n/2) lg(n/2) = (n/2)lgn - n/2 , 于是得到堆排序时间复杂度为Ω(nlgn) 为简单起见,考虑满二叉树,设最底层叶子结点个数为2^(h+1),总结点数为2^(h+2) - 1,则排序好2^(h+1) 个元素后,最多有(2^h个)的叶子结点已经排好序。 反证法,假设有>=2^h+1个叶子结点已经排好序,则原有叶子结点的所有父结点均已排好序。根据抽屉原理,这些叶子结点包括了根结点某个子树的所有叶子, 而且还包括另一子树的至少一个叶子结点,根结点某一个子树共有2^(h+1)-1个结点,另一个子树至少有lg(n)个结点已经排好序,而 2^(h+1)-1 + lg(n) > 2^(h+1),矛盾。 因此对于满二叉树,最底层叶子结点个数全部处理一次后,总共排好了2^(h+1)个元素,其中至少有2^h个元素在max-heapify 中不是叶子结点,这些结点需要一层一层的移动到根结点才能排好序。 即一次处理2^(h+1)个元素后,至少有2^h个元素在max-heapify 中不是叶子结点,使用数学归纳,当全部处理完n个元素后,至少有n/2个元素在max-heapify 中不是叶子结点,于是命题得证 楼主可以查看下我的文章,非常感谢! 很感谢楼主的文章,使我受益非浅,谢谢!
FancyMouse
2013-04-10
打赏
举报
回复
因为堆排序基于比较。基于比较的算法全都有nlogn的下限。所以堆排序下限也是nlogn。 直接证那就要麻烦多了……
icessl
2013-04-10
打赏
举报
回复
何谓 "最佳运行时间" ? 在算法里,我们一般不讨论 "最佳运行时间",而研究 "最多(长)时间耗费" 和 "平均时间耗费".
堆排序
、快速排序
排序算法之
堆排序
堆排序
是基于完全二叉树的排序算法,即二叉树的除最后一层外每一层都达到容纳结点的最大值。最后一层从左至右依次排列。
堆排序
引入了另一种算法设计技巧,使用一种我们称为“堆”的数据结构来进行信息管理,不仅用在
堆排序
中,而且它也可以构造一种有效的优先队列。 堆是一个数组,它可以被看成一个类似于完全二叉树的数据结构。即如果我们认为数组下标为 “i” 的位置的元素为根节点,则它...
【每日算法】
堆排序
&优先队列
堆排序
(heapsort)的
运行时间
为O(n logn),是一种原地排序算法,是不稳定的排序算法。堆基本介绍先直观感受一下,下面就是一个堆:16 7 3 20 17 8什么??上面不就一个数组吗……?!没错,(二叉)堆数据结构是一种数组对象。不过,让我们用另外一种方式来看这个数组:对于表示堆的数组arr[1…n],我们以arr[1]为根,给定某个节点下标i,令其父节点和左右后代节点的下标为:pare
堆排序
的最坏
运行时间
和最优
运行时间
堆排序
的最坏
运行时间
和最优
运行时间
堆排序
(C++实现)
堆排序
堆排序
运行时间
(n lgn)。它是一种原地(in place)排序算法:在任何时候,数组中只有常数个元素存储在数组外。堆的数据结构不至少在
堆排序
中有用,还可以构成一个有效的优先队列。数据结构二叉堆数据结构是一种数组对象,它可以被看做是一棵完全二叉树。树中的每个节点与数组中存放该节点值的那个元素对应。除了最后一层,树的每一层都是填满。 假设有数组A。 树的根为A[0]现在给定某个节点的下标i
十大经典排序算法详解(三)-
堆排序
,计数排序,桶排序,基数排序
十大经典排序算法-
堆排序
,计数排序,桶排序,基数排序 1-
堆排序
算法思想: 算法图解: 示例代码: 在这里插入代码片 复杂度分析: 2-计数排序 算法思想: 算法图解: 示例代码: 在这里插入代码片 复杂度分析: 3-桶排序 算法思想: 算法图解: 示例代码: 在这里插入代码片 复杂度分析: 4-基数排序 算法思想: 算法图解: 示例代码: 在这里插入代码片 复杂度分析: ...
数据结构与算法
33,010
社区成员
35,328
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章