Adaboost基本原理是将多个弱分类器加权组合,最终形成一个强分类器。算法中有两个重要的权重:样本权重和分类器权重。算法每一次迭代中只投入一个弱分类器进行训练,当前加权样本上计算得到误差,并通过误差来计算此分类器的权重,并更新样本的权重
样本: { ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x n , y n ) } \{(x_1,y_1),(x_2,y_2)...(x_n,y_n)\} {(x1,y1),(x2,y2)...(xn,yn)},其中 y i ∈ { − 1 , 1 } y_i\in\{-1,1\} yi∈{−1,1}
分类器: { k 1 , k 2 . . . k l } \{k_1,k_2...k_l\} {k1,k2...kl},其中 k j ( x i ) ∈ { − 1 , 1 } k_j(x_i)\in\{-1,1\} kj(xi)∈{−1,1}
样本初始权重: w ( 1 ) = ( w 1 ( 1 ) , w 2 ( 1 ) . . . w n ( 1 ) ) = ( 1 , 1 , . . . , 1 ) w^{(1)}=(w^{(1)}_1,w^{(1)}_2...w^{(1)}_n)=(1,1,...,1) w(1)=(w1(1),w2(1)...wn(1))=(1,1,...,1)
假设我们进行T次迭代(注:迭代次数不一定要等于分类器数量),则
对于 t = 1,2…,T
end
最终得到弱分类器的加权和
f ( x i ) = ∑ t = 1 T a t C t ( x i ) f(x_i)=\sum\limits^{T}_{t=1}a_tC_t(x_i) f(xi)=t=1∑TatCt(xi)
首先我们考虑Adaboost第一次迭代,对于分类器的选择和权重的确定,可以化为一个简单的优化问题:
y ∈ { − 1 , 1 } , 设 分 类 器 f ( x i ) = a 1 C 1 ( x i ) , 其 中 C 1 ( x i ) ∈ { − 1 , 1 } y\in\{-1,1\},设分类器f(x_i)=a_1C_1(x_i),其中C_1(x_i)\in\{-1,1\} y∈{−1,1},设分类器f(xi)=a1C1(xi),其中C1(xi)∈{−1,1}
损 失 函 数 : L ( y i , f ( x i ) ) = e − y i f ( x i ) 损失函数: L(y_i,f(x_i))=e^{-y_if(x_i)} 损失函数:L(yi,f(xi))=e−yif(xi)
总 误 差 为 : L ( a 1 , C 1 ) = ∑ i = 1 n e − y i f ( x i ) = ∑ i = 1 n e − y i a 1 C 1 ( x i ) 总误差为:L(a_1,C_1)=\sum\limits^{n}_{i=1}e^{-y_if(x_i)}=\sum\limits^{n}_{i=1}e^{-y_ia_1C_1(x_i)} 总误差为:L(a1,C1)=i=1∑ne−yif(xi)=i=1∑ne−yia1C1(xi)
则我们目标是求解优化问题: ( a 1 ^ , C 1 ^ ) = a r g m i n a 1 , C 1 L ( a 1 , C 1 ) (\hat{a_1},\hat{C_1})=argmin_{a_1,C_1}L(a_1,C_1) (a1^,C1^)=argmina1,C1L(a1,C1)
证明:
L ( a 1 , C 1 ) = ∑ i = 1 n e − y i a 1 C 1 ( x i ) L(a_1,C_1)=\sum\limits^{n}_{i=1}e^{-y_ia_1C_1(x_i)} L(a1,C1)=i=1∑ne−yia1C1(xi)
= ∑ i = 1 n e − a 1 I { y i = C 1 ( x i ) } + ∑ i = 1 n e a 1 I { y i ≠ C 1 ( x i ) } ( ∗ ) =\sum\limits^{n}_{i=1}e^{-a_1}I\{y_i=C_1(x_i)\}+\sum\limits^{n}_{i=1}e^{a_1}I\{y_i\neq C_1(x_i)\} (*) =i=1∑ne−a1I{yi=C1(xi)}+i=1∑nea1I{yi̸=C1(xi)} (∗)
= ∑ i = 1 n e − a 1 I { y i = C 1 ( x i ) } + ∑ i = 1 n e − a 1 I { y i ≠ C 1 ( x i ) } =\sum\limits^{n}_{i=1}e^{-a_1}I\{y_i=C_1(x_i)\}+\sum\limits^{n}_{i=1}e^{-a_1}I\{y_i\neq C_1(x_i)\} =i=1∑ne−a1I{yi=C1(xi)}+i=1∑ne−a1I{yi̸=C1(xi)}
− ∑ i = 1 n e − a 1 I { y i ≠ C 1 ( x i ) } + ∑ i = 1 n e a 1 I { y i ≠ C 1 ( x i ) } ( ∗ ∗ ) -\sum\limits^{n}_{i=1}e^{-a_1}I\{y_i\neq C_1(x_i)\}+\sum\limits^{n}_{i=1}e^{a_1}I\{y_i\neq C_1(x_i)\} (**) −i=1∑ne−a1I{yi̸=C1(xi)}+i=1∑nea1I{yi̸=C1(xi)} (∗∗)
= ∑ i = 1 n e − a 1 + ∑ i = 1 n ( e a 1 − e − a 1 ) I { y i ≠ C 1 ( x i ) } =\sum\limits^{n}_{i=1}e^{-a_1}+\sum\limits^{n}_{i=1}(e^{a_1}-e^{-a_1})I\{y_i\neq C_1(x_i)\} =i=1∑ne−a1+i=1∑n(ea1−e−a1)I{yi̸=C1(xi)}
= n e − a 1 + ( e a 1 − e − a 1 ) ∑ i = 1 n I { y i ≠ C 1 ( x i ) } =ne^{-a_1}+(e^{a_1}-e^{-a_1})\sum\limits^{n}_{i=1}I\{y_i\neq C_1(x_i)\} =ne−a1+(ea1−e−a1)i=1∑nI{yi̸=C1(xi)}
所以
C 1 ^ = a r g m i n C 1 ∑ i = 1 n I { y i ≠ C 1 ( x i ) } \hat{C_1}=argmin_{C_1}\sum\limits^{n}_{i=1}I\{y_i\neq C_1(x_i)\} C1^=argminC1i=1∑nI{yi̸=C1(xi)}
此时分类器在样本上的误判率为
E 1 = 1 n ∑ i = 1 n I { y i ≠ C 1 ( x i ) } E_1=\frac{1}{n}\sum\limits^{n}_{i=1}I\{y_i\neq C_1(x_i)\} E1=n1i=1∑nI{yi̸=C1(xi)}
从式子中可以看到,为了使得总体误差最小化,我们需要选择一个使得误判率 E 1 E_1 E1最小的分类器。
确定了 C 1 ^ \hat{C_1} C1^ 后,下面来求 a 1 ^ \hat{a_1} a1^,对 L ( a 1 , C 1 ) L(a_1,C_1) L(a1,C1) 求一阶导
L ( a 1 , C 1 ) = n [ e − a 1 + ( e a 1 − e − a 1 ) E 1 ] L(a_1,C_1)=n[e^{-a_1}+(e^{a_1}-e^{-a_1})E_1] L(a1,C1)=n[e−a1+(ea1−e−a1)E1]
∂ L ( a 1 , C 1 ) ∂ a 1 = n [ − e − a 1 + ( e a 1 + e − a 1 ) E 1 ] = 0 \frac{\partial L(a_1,C_1)}{\partial a_1}=n[-e^{-a_1}+(e^{a_1}+e^{-a_1})E_1]=0 ∂a1∂L(a1,C1)=n[−e−a1+(ea1+e−a1)E1]=0
⇒ − 1 + ( e 2 a 1 + 1 ) E 1 = 0 \Rightarrow -1+(e^{2a_1}+1)E_1=0 ⇒−1+(e2a1+1)E1=0
⇒ a 1 ^ = 1 2 l n 1 − E 1 E 1 \Rightarrow \hat{a_1}=\frac{1}{2}ln\frac{1-E_1}{E_1} ⇒a1^=21lnE11−E1
观察 a 1 ^ \hat{a_1} a1^,我们发现当误判率 E 1 E_1 E1 越大时, a 1 ^ \hat{a_1} a1^ 越小,这很符合我们的直观理解:当这个弱分类器分类效果较差时,我们就给予它较小的权重,以减小对正确结果的影响
下面我们在第一个分类器的基础上,再加入一个弱分类器,对于这个分类器的选择和权重确定,同样是一个优化问题:
y ∈ { − 1 , 1 } , 设 分 类 器 f ( x i ) = a 1 ^ C 1 ^ ( x i ) + a 2 C 2 ( x i ) , 其 中 C 2 ( x i ) ∈ { − 1 , 1 } y\in\{-1,1\},设分类器f(x_i)=\hat{a_1}\hat{C_1}(x_i)+a_2C_2(x_i),其中C_2(x_i)\in\{-1,1\} y∈{−1,1},设分类器f(xi)=a1^C1^(xi)+a2C2(xi),其中C2(xi)∈{−1,1}
损 失 函 数 ( 没 变 ) : L ( y i , f ( x i ) ) = e − y i f ( x i ) 损失函数_{(没变)}: L(y_i,f(x_i))=e^{-y_if(x_i)} 损失函数(没变):L(yi,f(xi))=e−yif(xi)
总 误 差 为 : L ( a 2 , C 2 ) = ∑ i = 1 n e − y i f ( x i ) = ∑ i = 1 n e − y i [ a 1 ^ C 1 ^ ( x i ) + a 2 C 2 ( x i ) ] 总误差为:L(a_2,C_2)=\sum\limits^{n}_{i=1}e^{-y_if(x_i)}=\sum\limits^{n}_{i=1}e^{-y_i[\hat{a_1}\hat{C_1}(x_i)+a_2C_2(x_i)]} 总误差为:L(a2,C2)=i=1∑ne−yif(xi)=i=1∑ne−yi[a1^C1^(xi)+a2C2(xi)]
则我们目标是求解优化问题: ( a 2 ^ , C 2 ^ ) = a r g m i n a 2 , C 2 L ( a 2 , C 2 ) (\hat{a_2},\hat{C_2})=argmin_{a_2,C_2}L(a_2,C_2) (a2^,C2^)=argmina2,C2L(a2,C2)
(注:此时分类器中 a 1 ^ \hat{a_1} a1^和 C 1 ^ \hat{C_1} C1^是确定的,因为我们在2.1.1的第一步优化中已经把其解出了)
证明:
L ( a 2 , C 2 ) = ∑ i = 1 n e − y i [ a 1 ^ C 1 ^ ( x i ) + a 2 C 2 ( x i ) ] L(a_2,C_2)=\sum\limits^{n}_{i=1}e^{-y_i[\hat{a_1}\hat{C_1}(x_i)+a_2C_2(x_i)]} L(a2,C2)=i=1∑ne−yi[a1^C1^(xi)+a2C2(xi)]
= ∑ i = 1 n e − y i a 1 ^ C 1 ^ ( x i ) e − y i a 2 C 2 ( x i ) =\sum\limits^{n}_{i=1}e^{-y_i\hat{a_1}\hat{C_1}(x_i)}e^{-y_ia_2C_2(x_i)} =i=1∑ne−yia1^C1^(xi)e−yia2C2(xi)
(设 w i = e − y i a 1 ^ C 1 ^ ( x i ) w_i=e^{-y_i\hat{a_1}\hat{C_1}(x_i)} wi=e−yia1^C1^(xi))
= ∑ i = 1 n w i e − y i a 2 C 2 ( x i ) =\sum\limits^{n}_{i=1}w_ie^{-y_ia_2C_2(x_i)} =i=1∑nwie−yia2C2(xi)
(对等式做2.1.1中 ( ∗ ) ( ∗ ∗ ) (*)(**) (∗)(∗∗)中相同处理,这里只是多了一个 m i m_i mi)
= ∑ i = 1 n w i e − a 2 + ∑ i = 1 n w i ( e a 2 − e − a 2 ) I { y i ≠ C 2 ( x i ) } } =\sum\limits^{n}_{i=1}w_ie^{-a_2}+\sum\limits^{n}_{i=1}w_i(e^{a_2}-e^{-a_2})I\{y_i\neq C_2(x_i)\}\} =i=1∑nwie−a2+i=1∑nwi(ea2−e−a2)I{yi̸=C2(xi)}}
= e − a 2 ∑ i = 1 n w i + ( e a 2 − e − a 2 ) ∑ i = 1 n w i I { y i ≠ C 2 ( x i ) } } =e^{-a_2}\sum\limits^{n}_{i=1}w_i+(e^{a_2}-e^{-a_2})\sum\limits^{n}_{i=1}w_iI\{y_i\neq C_2(x_i)\}\} =e−a2i=1∑nwi+(ea2−e−a2)i=1∑nwiI{yi̸=C2(xi)}}
所以
C 2 ^ = a r g m i n C 2 ∑ i = 1 n w i I { y i ≠ C 2 ( x i ) } \hat{C_2}=argmin_{C_2}\sum\limits^{n}_{i=1}w_iI\{y_i\neq C_2(x_i)\} C2^=argminC2i=1∑nwiI{yi̸=C2(xi)}
此时分类器在样本上的误判率为
E 2 = ∑ i = 1 n w i I { y i ≠ C 1 ( x i ) } ∑ j = 1 n w j E_2=\frac{\sum\limits^{n}_{i=1}w_iI\{y_i\neq C_1(x_i)\}}{\sum\limits^{n}_{j=1}w_j} E2=j=1∑nwji=1∑nwiI{yi̸=C1(xi)}
( ∑ j = 1 n w j 为 归 一 化 常 数 , 这 里 去 掉 该 常 数 定 义 E 2 也 是 可 以 的 ) (\sum\limits^{n}_{j=1}w_j为归一化常数,这里去掉该常数定义E_2也是可以的) (j=1∑nwj为归一化常数,这里去掉该常数定义E2也是可以的)
从式子中可以看到,在这一步优化中,为了使得总体误差最小化,我们需要选择一个使得加权误判率 E 2 E_2 E2最小的分类器。
注意这里的加权二字,我们可以把 w i w_i wi 看作样本权重,其中
w i = e − y i a 1 ^ C 1 ^ ( x i ) = { e − a 1 ^ y i = C 1 ^ ( x i ) e a 1 ^ y i ≠ C 1 ^ ( x i ) w_i=e^{-y_i\hat{a_1}\hat{C_1}(x_i)}=\left\{\begin{matrix} e^{-\hat{a_1}} y_i=\hat{C_1}(x_i) \\e^{\hat{a_1}} y_i\neq\hat{C_1}(x_i) \end{matrix}\right. wi=e−yia1^C1^(xi)={e−a1^ yi=C1^(xi)ea1^ yi̸=C1^(xi)
(其实在第一次迭代中 w i w_i wi 也是存在的,不过我们默认其初始值为 { 1 , 1 , . . . 1 } \{1,1,...1\} {1,1,...1},所以没有特意写出)
我们可以看到, m i m_i mi 实际上是由第一个分类器决定的,它和大小 C 1 ^ \hat{C_1} C1^ 的分类效果有关:
1. 当 C 1 ^ ( x i ) \hat{C_1}(x_i) C1^(xi)分类正确时,如果 C 1 ^ \hat{C_1} C1^ 对所有样本的分类越准确, a i ^ \hat{a_i} ai^就越大,从而使得 w i w_i wi 越小。
如果 C 1 ^ \hat{C_1} C1^ 对所有样本的分类越差, a i ^ \hat{a_i} ai^就越小,从而使得 w i w_i wi 越大。
2. 当 C 1 ^ ( x i ) \hat{C_1}(x_i) C1^(xi)分类错误时,如果 C 1 ^ \hat{C_1} C1^ 对所有样本的分类越准确, a i ^ \hat{a_i} ai^就越大,从而使得 w i w_i wi 越大。
如果 C 1 ^ \hat{C_1} C1^ 对所有样本的分类越差, a i ^ \hat{a_i} ai^就越小,从而使得 w i w_i wi 越小。
可以这样理解,好的分类器分错样本时,说明该样本容易分错,应增加权重,加强对其的训练。而差的分类器分类结果本来就很随意,分正确一个样本并没有太多意义,所以仍然要增强训练。
确定了 C 2 ^ \hat{C_2} C2^ 后,下面来求 a 2 ^ \hat{a_2} a2^,对 L ( a 2 , C 2 ) L(a_2,C_2) L(a2,C2) 求一阶导
L ( a 2 , C 2 ) = ∑ i = 1 n w i [ e − a 2 + ( e a 2 − e − a 2 ) E 2 ] L(a_2,C_2)=\sum\limits^{n}_{i=1}w_i[e^{-a_2}+(e^{a_2}-e^{-a_2})E_2] L(a2,C2)=i=1∑nwi[e−a2+(ea2−e−a2)E2]
∂ L ( a 2 , C 2 ) ∂ a 2 = ∑ i = 1 n w i [ − e − a 2 + ( e a 2 + e − a 2 ) E 2 ] = 0 \frac{\partial L(a_2,C_2)}{\partial a_2}=\sum\limits^{n}_{i=1}w_i[-e^{-a_2}+(e^{a_2}+e^{-a_2})E_2]=0 ∂a2∂L(a2,C2)=i=1∑nwi[−e−a2+(ea2+e−a2)E2]=0
⇒ − 1 + ( e 2 a 2 + 1 ) E 2 = 0 \Rightarrow -1+(e^{2a_2}+1)E_2=0 ⇒−1+(e2a2+1)E2=0
⇒ a 2 ^ = 1 2 l n 1 − E 2 E 2 \Rightarrow \hat{a_2}=\frac{1}{2}ln\frac{1-E_2}{E_2} ⇒a2^=21lnE21−E2
有了前两个分类器的参数,我们可以计算一下第三次迭代的样本权重
w i 3 = e − y i [ a 1 ^ C 1 ^ ( x i ) + a 2 ^ C 2 ^ ( x i ) ] = w i 2 e − y i a 2 ^ C 2 ^ ( x i ) w_i^3=e^{-y_i[\hat{a_1}\hat{C_1}(x_i)+\hat{a_2}\hat{C_2}(x_i)]}= w_i^2e^{-y_i\hat{a_2}\hat{C_2}(x_i)} wi3=e−yi[a1^C1^(xi)+a2^C2^(xi)]=wi2e−yia2^C2^(xi)
根据式子的规律,第k次迭代的样本权重就为
w i k = w i k − 1 e − y i a k − 1 ^ C k − 1 ^ ( x i ) w_i^k=w_i^{k-1}e^{-y_i\hat{a_{k-1}}\hat{C_{k-1}}(x_i)} wik=wik−1e−yiak−1^Ck−1^(xi)
到了第k次迭代,我们已经得到了k-1个弱分类器加权组成的分类器,下面就要计算第k个分类器的各个参数
分 类 器 为 f ( x i ) = ∑ t = 1 k − 1 a t ^ C t ^ ( x i ) + a k C k ( x i ) 分类器为f(x_i)=\sum\limits^{k-1}_{t=1}\hat{a_t}\hat{C_t}(x_i)+a_k C_k(x_i) 分类器为f(xi)=t=1∑k−1at^Ct^(xi)+akCk(xi)
此次迭代的样本权重为(由前k-1个分类器决定)
w i k = w i k − 1 e − y i a k − 1 ^ C k − 1 ^ ( x i ) w_i^k=w_i^{k-1}e^{-y_i\hat{a_{k-1}}\hat{C_{k-1}}(x_i)} wik=wik−1e−yiak−1^Ck−1^(xi)
选择的分类器为
C k ^ = a r g m i n C k ∑ i = 1 n w i k I { y i ≠ C k ( x i ) } \hat{C_k}=argmin_{C_k}\sum\limits^{n}_{i=1}w_i^kI\{y_i\neq C_k(x_i)\} Ck^=argminCki=1∑nwikI{yi̸=Ck(xi)}
其中误判率为
E k = ∑ i = 1 n w i k I { y i ≠ C k ( x i ) } ∑ j = 1 n w j k E_k=\frac{\sum\limits^{n}_{i=1}w_i^kI\{y_i\neq C_k(x_i)\}}{\sum\limits^{n}_{j=1}w_j^k} Ek=j=1∑nwjki=1∑nwikI{yi̸=Ck(xi)}
(也就是选择使得加权误判率最小的分类器,可以回顾一下文章开始,adaboost算法的确是这么做的)
计算该分类器的权重
a k = 1 2 l n ( 1 − E k E k ) a_k=\frac{1}{2}ln(\frac{1-E_k}{E_k}) ak=21ln(Ek1−Ek)
更新下一次迭代的样本权重
(步骤1实际上是k-1次迭代的步骤4,这里为了方便说明就都写上了)
w i k + 1 = w i k e − y i a k ^ C k ^ ( x i ) w_i^{k+1}=w_i^{k}e^{-y_i\hat{a_{k}}\hat{C_{k}}(x_i)} wik+1=wike−yiak^Ck^(xi)
可以看到步骤2、3的公式都和文章开始的算法中的一致了,更新样本权重的公式有差别,但实际上是一样的,下面给出推导:
算法中的公式为
w i ( k + 1 ) = w i ( k ) ∑ j = 1 n w j ( k ) e x p { 2 a k ^ I { y i ≠ C k ^ ( x i ) } } w^{(k+1)}_i=\frac{w^{(k)}_i}{\sum\limits^{n}_{j=1}w^{(k)}_j}exp\{2\hat{a_k} I\{y_i\neq \hat{C_k}(x_i)\}\} wi(k+1)=j=1∑nwj(k)wi(k)exp{2ak^I{yi̸=Ck^(xi)}}
我们推出的公式为
w i k + 1 = w i k e − y i a k ^ C k ^ ( x i ) = w i k e − a k ^ e a k ^ [ 1 − y i C k ^ ( x i ) ] w_i^{k+1}=w_i^{k}e^{-y_i\hat{a_{k}}\hat{C_{k}}(x_i)}=w_i^{k}e^{-\hat{a_{k}}}e^{\hat{a_{k}}[1-y_i\hat{C_{k}}(x_i)]} wik+1=wike−yiak^Ck^(xi)=wike−ak^eak^[1−yiCk^(xi)]
而 1 − y i C k ^ ( x i ) = { 0 y i = C k ^ ( x i ) 2 y i ≠ C k ^ ( x i ) = 2 I { y i ≠ C k ^ ( x i ) } 而 1-y_i\hat{C_{k}}(x_i) =\left\{\begin{matrix} 0 y_i=\hat{C_k}(x_i) \\2 y_i\neq\hat{C_k}(x_i) \end{matrix}\right.=2I\{y_i\neq \hat{C_k}(x_i)\} 而 1−yiCk^(xi)={0 yi=Ck^(xi)2 yi̸=Ck^(xi)=2I{yi̸=Ck^(xi)}
所 以 w i k + 1 = w i k e − a k ^ e 2 a k ^ I { y i ≠ C k ^ ( x i ) } 所以 w_i^{k+1}=w_i^{k}e^{-\hat{a_{k}}}e^{2\hat{a_{k}}I\{y_i\neq \hat{C_k}(x_i)\}} 所以 wik+1=wike−ak^e2ak^I{yi̸=Ck^(xi)}
∝ w i ( k ) ∑ j = 1 n w j ( k ) e x p { 2 a k ^ I { y i ≠ C k ^ ( x i ) } } \propto \frac{w^{(k)}_i}{\sum\limits^{n}_{j=1}w^{(k)}_j}exp\{2\hat{a_k} I\{y_i\neq \hat{C_k}(x_i)\}\} ∝j=1∑nwj(k)wi(k)exp{2ak^I{yi̸=Ck^(xi)}}
( ∑ j = 1 n w j ( k ) 为 归 一 化 常 数 ) (\sum\limits^{n}_{j=1}w^{(k)}_j为归一化常数) (j=1∑nwj(k)为归一化常数)
Adaboost 算法最终的的分类器是
f ( x i ) = ∑ t = 1 T a t C t ( x i ) f(x_i)=\sum\limits^{T}_{t=1}a_tC_t(x_i) f(xi)=t=1∑TatCt(xi)
所以实际上Adaboost想优化的问题是
∑ i = 1 n L ( y i , f ( x i ) ) \sum\limits^{n}_{i=1}L(y_i,f(x_i)) i=1∑nL(yi,f(xi))
但由于参数过多,直接优化容易导致过拟合问题,所以考虑加入惩罚项
∑ i = 1 n L ( y i , f ( x i ) ) + λ 1 ∣ ∣ a ∣ ∣ + λ 1 ∣ ∣ C ∣ ∣ \sum\limits^{n}_{i=1}L(y_i,f(x_i))+\lambda_1 ||a||+\lambda_1 ||C|| i=1∑nL(yi,f(xi))+λ1∣∣a∣∣+λ1∣∣C∣∣
此优化问题非常复杂,难以求解,所以我们采用上面这种每次优化一个分类器的优化算法。该算法不仅解决了复杂性的问题,而且达到的结果是和上式是一致的。