A. 如何理解“对数”
对数是苏格兰数学家纳皮尔在做天文研究是发现的一种乘法开方的逆算法,这一重大的发明,让许多数学研究家欣喜若狂,因为它解决了算术上的一个大难题。对数的形式有log和ln,形式的下标是乘数,上标是最终得数,等值的数是次方数,在我们现在看来这只不过是很简单的数学计算,而它的出现却能够给当时的各界行业的人带来震撼和喜悦,可见它的意义重大。其实对数的本质和基本的算术乘法和开方有直接关系,这是算数的三种表现形式,因此理解对数的含义,也需要从这三个形式的关系分析入手。
1、对数简便了连乘的手写工序。最开始写算术乘法我们都是一个一个的乘,比如5*5*5,简短的几个不麻烦书写,也不会出现写漏和多写的情况,但乘得越来越多就会出现这些问题,因此将一串很长的算术整合成一个式子可以缩减书写量和提高正确率,运用次方就可以写成5^3,它的等值是125,写成对数形式就成了log5 125=3。
B. 数据结构书中的logN 都是默认以2为底的么也即logN表示2叉树层数
你的数据结构书的前面可能有自定义,以后只要出现logN就认为是以2为底的,在其他书中不适合
C. 严蔚敏老师的《数据结构》里,关于时间复杂度的写法,譬如logn,这个对数函数的底数是多少啊
算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。不过无论底数是什么,log级别的渐进意义是一样的。也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的。
(3)logn在数学中什么意思扩展阅读:
时间复杂度的计算方法
(1)一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得T(n)/f(n)的极限值(当n趋近于无穷大时)为不等于零的常数,则称f(n)是T(n)的同数量级函数。
记作T(n)=O(f(n)),称O(f(n))
为算法的渐进时间复杂度,简称时间复杂度。
(2)在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出 T(n) 的同数量级。
(3)在pascal中比较容易理解,容易计算的方法是:看看有几重for循环,只有一重则时间复杂度为O(n),二重则为O(n^2),依此类推,如果有二分则为O(logn),二分例如快速幂、二分查找,如果一个for循环套一个二分,那么时间复杂度则为O(nlogn)。