Logarithms-对数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uestcyms/article/details/84779789

对数意味着什么?

为了得到这个答案,基于这个底数,需要是它的多少幂?
例如对于:log_{10}{100}
它的意思是,底数是10,答案是100,那么10的多少幂能得到100?
也就是:10^x = 100
那么我们知道x = 2;所以 log_{10}{100} = 2;

对数的一些规则

下面的这些规律,在我们进行代数的数学运算是,非常有帮助。

  • 基本的: \log_{b}{(b^x)} = x 在简化方程式中很有帮助。
  • 乘法: Multiplication: \log_{b}{(x*y)} = \log_{b}{(x)} + \log_{b}{(y)} 。
  • 除法:Division: \log_{b}{(x/y)} = \log_{b}{(x)} - \log_{b}{(y)}。
  • 幂:Powers: \log_{b}{(x^y)} = y * \log_{b}{(x)} 。
  • 底数替换:Change of base: \log_{b}{(x)} = \frac{\log_{c}{(x)} }{\log_{c}{(b)} } 在更改对数的底时,非常有用,将对数的底从b该为c。

备注:frac:LaTex公式,frac{1}{10}相当于1/10;

在算法和面试中,哪些地方会提到对数

在计算机科学中,我们经常会问自己这样一个问题:

How many times must we double 1 before we get to n?
或者
How many times must we divide n in half in order to get back down to 1?

进一步思考上面的两个问题,可以转换为以下问题:

how many times from 1 to n by multiplying 2.
how many times from n to 1 by dividing 2

两者拥有同样的答案,就是log_{2}{n}。
如果这个答案不够明显,我们通过如下例子来证明得到它。

二分查找中的对数

二分查找需要耗费多少次,二分查找在有序列表中找寻目标数的一种算法。经过如下:

  1. 从列表中间的数开始:它是否大于或于目标数?由于该列表是有序的,我们可以得到目标数在列表的左侧还是右侧。
  2. 将问题拆分成半:我们从列表中丢弃不包含目标数的那一半。
  3. 重复上面的规则在新的列表中,直到找到目标数或则丢弃整个列表。

所以在二分查找过程中需要花费多少长时间?
So the question is, “how many times must we divide our original list size (n) in half until we get down to 1?”
推导过程:

n * \frac{1}{2} * \frac{1}{2} * \frac{1}{2} * \frac{1}{2} * … = 1
How many \frac{1}{2}'s are there? We don’t know yet, but we can call that number x:
n * (\frac{1}{2})^x = 1
n * \frac{1^ x}{2^x} =1
n*\frac{1}{2^x}=1
\frac{n}{2^x}=1
2^x=n
log_{2}{2^x} = log_{2}{n}
x = log_{2}{n}

扫描二维码关注公众号,回复: 5439210 查看本文章

所以二分法需要的次数为log_{2}{n}。

还有排序中的二分排序、完全二叉树的层级等等问题,都与log相关。

底数的总结

有时,人们不显示的写出底数,在计算机科学中,对数的底数常常都是2,所以log{n}也就与log_{2}{n}等同。

有些时候,log{n}的底数是10(数学);有些时候,底数是e(常数)。

猜你喜欢

转载自blog.csdn.net/uestcyms/article/details/84779789