(合并排序)是从基数2上的n log n开始记录的吗?

时间:2017-09-10 16:49:23

标签: algorithm sorting computer-science mergesort bubble-sort

我在课堂上了解到合并排序是 O n ·log( n )),但我不清楚是否 O n ·log 2 n ))或< EM> 0 的(名词·登录<子>的 10 名词的))。我已经阅读了Stack Overflow(在Big O notation Log Base 2 or Log Base 10)“无关紧要”,因为它们给大约相同的运行时间;但我想要完全运行时。例如,我知道具有512个元素的冒泡排序需要512²/ 2 - 512/2 = 130816个时间单位;合并排序与512个元素取512·9 = 4608个时间单位,或512·5.404 = 2767个时间单位?

3 个答案:

答案 0 :(得分:2)

由于merge sort将数组分成两半,然后是,基数为2。 正如评论所说,基数是一个常数因素,所以它在大O符号中并不重要。

答案 1 :(得分:2)

你的问题是基于一个错误的前提。

假设我有两个等价的算法,A和B.算法A执行十次加法而不是乘法;算法B执行一次乘法而不添加。

算法分析表明A和B是恒定时间算法( O (1))。您显然希望区分它们,说 O (1)仅仅是“近似”,但A的“精确”运行时为10,B的“精确”运行时为1,所以A比B快十倍。这似乎是合理的。但也许在这台计算机上,乘法是加法的两倍,所以差别实际上更像是10:2(即5:1)。或者相反,从一个指令进入下一个指令(递增程序计数器)的成本可能与算术运算的成本一样昂贵,因此差异实际上更像是19:1。哦,除了我们甚至没有考虑过内存操作,这些内存操作通常比算术操作更昂贵 这些算法中的值来自何处?

因此,如果您想要精确的运行时,算法分析就不是正确的方法;它丢弃常数因子(使log 2 等效于log 10 )的原因是否则需要更多关于硬件和程序上下文的信息。等等,这会使结果普遍适用。

相反,你会使用基准测试 - 对于像你这样的小例子,这意味着microbenchmarking

答案 2 :(得分:0)

是的,它是登录基础2,但您可以修改算法并将数组拆分为3个部分,然后是log_3(n),4个部分是base-4,依此类推。 它真的(真的)无所谓。