堆排序时间复杂度

发布于 2022-09-01 17:18:26 字数 409 浏览 16 评论 0

堆排序,删除操作复杂度O(lgN),删除操作次数为N,但是每次删除后N都会减一。所以应该是:
lg(N)+lg(N-1)+…+lg2+lg1 = lg(N!)
然后根据lgN!公式:
lgN!=(lg(2pi)+lgN)/2+N(lgN-lge);

得出O(lg(N!)) = O(NlgN)

但是基本都直接写结果为O(NlgN),是默认这样,还是我的思路是错的?

lgN!公式详情:http://www.cnblogs.com/zhangshu/archive/2011/08/12/2135855.html

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我喜欢麦丽素 2022-09-08 17:18:26

O 是上界, log(n!) <= log(n^n),自然是有道理的。
堆排序是基于比较的排序,下界是 nlogn

上下界都一样,应该可以说明复杂度就是 nlogn

题主通过 sterling formula 证明的办法更直接: log(n!) 和 nlogn 是一样的。

反话 2022-09-08 17:18:26

换一种思路来计算更简单:不考虑每次删除后N-1

log(N) + log(N) + ... + log(N) = log(N^N) = NlogN

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文