复杂度O(f(n))中用的数学知识
从小到大排序
计算次数表示方式 | 计算公式示例 |
---|---|
1 | 1 |
logn | log24 = 2 ; log28 = 3 |
n | n |
nlogn | 8log28 = 8*3 = 24 |
n2 | n2 |
算法中为什么会用到 log
示例 | 计算演变 | 结果 |
---|---|---|
log28 | log223 | 3 |
log216 | log224 | 4 |
log39 | log332 | 2 |
log327 | log333 | 3 |
在算法中,有二分法、三分法 最终被划分多少次完成任务 , 用log的计算结果可以很清晰的表示出来拆分用的最大次数
算法中 logn 的底数到底是多少
算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。
如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。
不过无论底数是什么,log级别的渐进意义是一样的。
也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的。
我们先考虑O(logx(n))和O(logy(n)),x!=y,我们是在考虑n趋于无穷的情况。
求当n趋于无穷大时logx(n)/logy(n)的极限可以发现,极限等于lny/lnx,也就是一个常数,
也就是说,在n趋于无穷大的时候,这两个东西仅差一个常数。
所以从研究算法的角度log的底数不重要。