博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
时间复杂度中的log(n)底数到底是多少?
阅读量:4176 次
发布时间:2019-05-26

本文共 680 字,大约阅读时间需要 2 分钟。

原文:https://blog.csdn.net/bengxu/article/details/80320546  

其实这里的底数对于研究程序运行效率不重要,写代码时要考虑的是数据规模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 符号。

你可能感兴趣的文章
IntelliJ IDEA导入Zookeeper源码
查看>>
Dubbo源码分析系列之服务的发布
查看>>
Java集合容器面试题(2020最新版)
查看>>
获取运行时类的父类及父类的泛型
查看>>
云服务器上安装oracle11g使用图形化界面
查看>>
(转载)linux命令之十八locate 命令
查看>>
Linux发行光盘(红旗 5.0 SP2发行版,已不使用仅参考)
查看>>
linux下如何将文件打包、压缩并分割成制定大小
查看>>
CentOS6.5升级内核到3.10.28
查看>>
linux内核补丁安装和编译安装
查看>>
(转载)linux命令之十九find 命令
查看>>
(转载)linux命令之二十 find命令之exec
查看>>
(转载)linux命令之二十一find命令之xargs
查看>>
centos下C编程调用libvirt的API访问KVM虚拟机
查看>>
(转载)linux命令之二十四tar命令
查看>>
(转载)linux命令之二十五chgrp命令
查看>>
IntelLinux显卡驱动安装指南
查看>>
(转载)linux命令之二十六chown命令
查看>>
(转载)linux命令之二十七gzip命令
查看>>
(转载)linux命令之二十八df 命令
查看>>