快速排序排序效率为O(N*logN)的log是以几为底的?

系列文章目录

1.元件基础
2.电路设计
3.PCB设计
4.元件焊接
6.程序设计
9.检测标准


一、百度搜索

百度搜素log2和lg2,他俩竟然是一样的。。。。。。。。

在这里插入图片描述

在这里插入图片描述

二、编程反推

log不写底数时底数到底是多少?

把常用的编程语言都反推一下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得出,常用编程语言中Math.log一般都是以E为底

三、高人指点

peng li
在计算时间复杂度的时候,你会发现log的底数并不重要,底数的巨大变化并不会带来结果上的数量级变化,通过log的换底公式(记不清是不是这个名字了),底数的差别可以转换成一个数,这个数可以看作常数,然后在确定渐进届的时候,常数就被忽略了。所以分析算法时间复杂度的大部分时候,对数的底数时可以忽略的。

算法复杂度中的O(logN)底数是多少

算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。
如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。
不过无论底数是什么,log级别的渐进意义是一样的。
也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的。

我们先考虑O(logx(n))和O(logy(n)),x!=y,我们是在考虑n趋于无穷的情况。
求当n趋于无穷大时logx(n)/logy(n)的极限可以发现,极限等于lny/lnx,也就是一个常数,
也就是说,在n趋于无穷大的时候,这两个东西仅差一个常数。
所以从研究算法的角度log的底数不重要。

最后,结合上面,我也说一下关于大O的定义(算法导论28页的定义),
注意把这个定义和高等数学中的极限部分做比较,
显然可以发现,这里的定义正是体现了一个极限的思想,
假设我们将n0取一个非常大的数字,
显然,当n大于n0的时候,我们可以发现任意底数的一个对数函数其实都相差一个常数倍而已。
所以书上说写的O(logn)已经可以表达所有底数的对数了,就像O(n^2)一样。
没有非常严格的证明,不过我觉得这样说比较好理解,如果有兴趣证明,完全可以参照高数上对极限趋于无穷的证明。

猜你喜欢

转载自blog.csdn.net/weixin_44407238/article/details/114114102