对数公式的换算,对于算法复杂度的推导非常重要。但是我总忘,这次特地总结一下常用的对数公式,以备后用。
名称 | 公式 |
---|
和差 |
log
α
M
N
=
log
α
M
+
l
o
g
α
N
\log_\alpha MN=\log_\alpha M+log_\alpha N
logαMN=logαM+logαN |
换底公式 |
log
α
x
=
log
β
x
log
β
α
\log_\alpha x=\frac{\log_\beta x}{\log_\beta\alpha}
logαx=logβαlogβx |
次方公式 |
log
a
n
x
m
=
m
n
log
a
x
\log_{a^n}x^m=\frac{m}{n}\log_ax
loganxm=nmlogax |
互换 |
M
log
a
N
=
N
log
a
M
M^{\log_aN}=N^{\log_aM}
MlogaN=NlogaM |
倒数 |
log
a
b
=
ln
b
ln
a
=
1
log
b
a
\log_ab=\frac{\ln b}{\ln a}=\frac{1}{\log_ba}
logab=lnalnb=logba1 |
链式 |
log
γ
β
log
β
α
=
ln
β
ln
γ
ln
α
ln
β
=
ln
α
ln
γ
=
log
γ
α
\log_\gamma \beta\log_\beta\alpha=\frac{\ln \beta}{\ln \gamma}\frac{\ln \alpha}{\ln \beta}=\frac{\ln \alpha}{\ln \gamma}=\log_\gamma\alpha
logγβlogβα=lnγlnβlnβlnα=lnγlnα=logγα |
还原 |
α
log
α
x
=
x
=
log
α
α
x
\alpha^{\log_\alpha x}=x=\log_\alpha \alpha^x
αlogαx=x=logααx |
注:公式总结自维基百科:https://zh.wikipedia.org/wiki/%E5%AF%B9%E6%95%B0。
基底是
e
e
e还是2的问题
在一些计算机相关的领域,书写
log
\log
log函数时经常会省略基底(base),例如时间复杂度
O
(
log
N
)
O(\log N)
O(logN),或者在机器学习领域用来做多分类的交叉熵损失函数:
L
c
e
(
x
,
y
)
=
−
∑
c
=
1
M
y
o
,
c
log
(
p
o
,
c
)
L_{ce}(x,y)=-\sum^M_{c=1}y_{o,c}\log(p_{o,c})
Lce(x,y)=−∑c=1Myo,clog(po,c),这个时候我们会想知道这些
log
\log
log函数的基底到底是数学常数
e
e
e还是2?
一般情况下,算法复杂度和信息论领域(例如交叉熵)的
log
\log
log计算都是以2为底,但也有少部分以
e
e
e为底的情况。其实我们对
log
\log
log的基底无需过分担心,因为以
e
e
e为底得出的结果与以2为底得出的结果比值是个常数,使用换底公式即可求得:
log
e
N
log
2
N
=
log
k
N
log
k
e
/
log
k
N
log
k
2
=
log
k
2
log
k
e
=
log
e
2.
\frac{\log_eN}{\log_2N}=\frac{\log_kN}{\log_ke}/\frac{\log_kN}{\log_k2}=\frac{\log_k2}{\log_ke}=\log_e2.
log2NlogeN=logkelogkN/logk2logkN=logkelogk2=loge2.
因此,我们不应该过分关注
log
\log
log函数的基底是
e
e
e还是2的问题,它们计算结果的比值总是一个常数,采用任何一个基底都不会对要解决的问题本身产生影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)