算法导论里的一句话

aoyihuashao 2011-04-13 05:20:43
南京大学中文版的。


11页。

1-2 合并排序中插入排序在短数组上的应用
虽然合并排序的最坏情况运行时间为o(nlgn),插入排序的未o(n*n),但在n较小的时候,后者更快。



这个怎么可能呢?

怎么算也是在n取正整数的时候,nlgn < n*n
...全文
337 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rockics 2011-04-15
  • 打赏
  • 举报
回复
南京大学中文版?

不过,lz,复杂度只是一个渐进的比较,只有N足够大的时候才有可比性,N很小的话,算法越简单越妙。

[Quote=引用楼主 aoyihuashao 的回复:]
南京大学中文版的。


11页。

1-2 合并排序中插入排序在短数组上的应用
虽然合并排序的最坏情况运行时间为o(nlgn),插入排序的未o(n*n),但在n较小的时候,后者更快。



这个怎么可能呢?

怎么算也是在n取正整数的时候,nlgn < n*n
[/Quote]
cxf7394373 2011-04-15
  • 打赏
  • 举报
回复
n较小的时候就不要比较nlgn 和 n*n了
fenix124 2011-04-15
  • 打赏
  • 举报
回复
前面有常数。
dolby_xiong 2011-04-15
  • 打赏
  • 举报
回复
合并排序中使用的递归调用,在递归切换(相当于一次又一次的函数调用)本身会有很大的时间成本,导致当N较小时,插入排序使用的实际时间优于合并排序。
aoyihuashao 2011-04-15
  • 打赏
  • 举报
回复
晓得聊。
超级大笨狼 2011-04-14
  • 打赏
  • 举报
回复
复杂度是个范围概念,比如冒泡排序,最坏是n*n最好是n,一般用最坏来表示。
快速排序复杂度是n*logN在某些场景,未必比冒泡n*n快。
比如:
Flash AS3动画里,需要每一帧对n个物体来碰撞检测。
n是几百个,想象愤怒小鸟。
如果两两检测,要检测是n*n次。
每秒几十帧,这个检测及其耗费资源。要做优化预先处理。
按照横竖轴坐标排好序,只检测相邻格子里的物体,就可以大大减少检测次数。
做到线性排序复杂度是必须的。
要O(n)而不是O(n*LogN)更不是O(n^2)

而这些物体是连续的变动,那么每帧交换位置的概率很小。
就是说原先排过队,下一帧,大多数物体还是保持顺序的,极少数交换过位置。
这时候,要用快速排序就没有冒泡划算,因为这时候冒泡复杂度接近O(n),就是大多数物体几乎没交换!~~
FancyMouse 2011-04-14
  • 打赏
  • 举报
回复
10^100*nlogn也是O(nlogn)
aoyihuashao 2011-04-14
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。。。

顶下吧 莫非没人学过这本书?
HimeTale 2011-04-14
  • 打赏
  • 举报
回复
n较小的时候比的是额外开销
luuillu 2011-04-13
  • 打赏
  • 举报
回复
堆排序的系数较高。

时间复杂度度没有考虑系数的不同 .比如两个程序分别处理n个数据,甲执行 5*n 次,时间复杂度度为
O(n); 乙执行 100*n 次,时间复杂度也是O(n)
showjim 2011-04-13
  • 打赏
  • 举报
回复
就算时间复杂度的常数项相同,时间复杂度与程序运行时间也不完全是一回事
keeya0416 2011-04-13
  • 打赏
  • 举报
回复
可能是说N较小的时候
合并排序中小数组的开销操作掩盖了其复杂度的优点

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧