前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >时间复杂度中的log(n)底数到底是多少?

时间复杂度中的log(n)底数到底是多少?

作者头像
城市中的游牧民族
发布2019-02-21 10:14:31
2.3K0
发布2019-02-21 10:14:31
举报
文章被收录于专栏:前端真相前端真相

其实这里的底数对于研究程序运行效率不重要,写代码时要考虑的是数据规模n对程序运行效率的影响,常数部分则忽略,同样的,如果不同时间复杂度的倍数关系为常数,那也可以近似认为两者为同一量级的时间复杂度。

现在来看看为什么底数具体为多少不重要?

读者只需要掌握(依稀记得)中学数学知识就够了。

对数函数图像
对数函数图像

假设有底数为2和3的两个对数函数,如上图。当X取N(数据规模)时,求所对应的时间复杂度得比值,即对数函数对应的y值,用来衡量对数底数对时间复杂度的影响。

比值为log2 N / log3 N,运用换底公式后得:(lnN/ln2) / (lnN/ln3) = ln3 / ln2,ln为自然对数,显然这三个常数,与变量N无关。

用文字表述:算法时间复杂度为log(n)时,不同底数对应的时间复杂度的倍数关系为常数,不会随着底数的不同而不同,因此可以将不同底数的对数函数所代表的时间复杂度,当作是同一类复杂度处理,即抽象成一类问题。

当然这里的底数2和3可以用a和b替代,a,b大于等于2,属于整数。a,b取值是如何确定的呢?

有点编程经验的都知道,分而治之的概念。排序算法中有一个叫做“归并排序”或者“合并排序”的算法,它用到的就是分而治之的思想,而它的时间复杂度就是N*logN,此算法采用的是二分法,所以可以认为对应的对数函数底数为2,也有可能是三分法,底数为3,以此类推。

但是不可能是分数或者负数。

说明:为了便于说明,本文时间复杂度一概省略 O 符号。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年05月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 现在来看看为什么底数具体为多少不重要?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档