二分法采用五五分平均复杂度最小(相比四六分或三七分等)的定量证明方法
二分法采用五五分平均復雜度最小(相比四六分或三七分等)的定量證明方法
??有一天晚上我深夜失眠,躺在床上輾轉反側,無法入睡。在床上滾來滾去,覺得十分無聊,不知怎么的想起了二分法。這是我們解決數據結構或算法問題中常用的一種divide and conquer的分治手段。但是二分法中的這個二,說的是把一個問題分解成兩個子問題遞歸求解,并沒有說明兩個子問題要平均分。那么為什么通常大家都會進行平均的五五分配呢,應該是需要一個合適的理由的。
??于是我在黑暗中瞪著眼睛開始想,好像想出了一個比較嚴謹的證明方法,po出來和廣大網(噴)友(子)一起討論,看看是不是有什么不合適的地方需要修改。首先給出結論:二分法采用五五分的平均復雜度是最小的, 下面給出一個定量的證明。
??假設我們有一個規模為nnn的問題,根據二分的思想,將其分為αn\alpha nαn和(1?α)n(1-\alpha)n(1?α)n兩個部分,其中0≤α≤10 \leq\alpha\leq10≤α≤1。用復雜度的期望來表征這個二分結果的平均復雜度,即:
f(n) ̄=αf(αn)+(1?α)f((1?α)n)=T(α),0≤α≤1\overline{f(n)} = \alpha f(\alpha n) + (1-\alpha)f((1-\alpha )n) = T(\alpha), 0\leq\alpha\leq1f(n)?=αf(αn)+(1?α)f((1?α)n)=T(α),0≤α≤1
即給定一個規模為nnn的問題,其平均復雜度可以表征成為一個關于α\alphaα的函數。對于這個函數,顯然有T(α)=T(1?α)T(\alpha) = T(1-\alpha)T(α)=T(1?α),即該函數是關于α=12\alpha=\frac{1}{2}α=21?對稱的。那么問題來了,這個函數為什么在α=12\alpha=\frac{1}{2}α=21?時取得全局最小值呢?
??這里為了容易理解我們首先討論另外一個更簡單的函數:t1(α)=αf(αn)t_1(\alpha) = \alpha f(\alpha n)t1?(α)=αf(αn),這里面需要注意一下的是這個nnn在這里是一個常數。問題的關鍵就在于這個t1(α)t_1(\alpha)t1?(α)的凹凸性。有關于函數的凹凸性有很多等價的定義,這里需要注意一下,很多教材或者wiki上對凹函數和凸函數的定義都不同,有的管上彎的叫凹函數有的叫凸函數,其實具體叫什么并無所謂,po一張網上撈來的圖并以此為下文的凹凸函數定義。
對于t1(α)=αf(αn)t_1(\alpha) = \alpha f(\alpha n)t1?(α)=αf(αn),其中nnn為常數。顯然t2(α)=t1(1?α)=(1?α)f((1?α)n)t_2(\alpha)=t_1(1-\alpha) = (1-\alpha) f((1-\alpha) n)t2?(α)=t1?(1?α)=(1?α)f((1?α)n),即t1(α)t_1(\alpha)t1?(α)與t1(α)t_1(\alpha)t1?(α)是關于α=12\alpha=\frac{1}{2}α=21?對稱的,即這兩個函數的凹凸性相同。T(α)=t1(α)+t2(α)T(\alpha) = t_1(\alpha)+t_2(\alpha)T(α)=t1?(α)+t2?(α),兩個凹函數的和仍然是凹函數,兩個凸函數的和仍然是凸函數,所以T(α)T(\alpha)T(α)的凹凸性也與t1(α)=αf(αn)t_1(\alpha) = \alpha f(\alpha n)t1?(α)=αf(αn)的凹凸性相同。
至此,我們得到了兩個非常重要的結論:
1. f(n) ̄=T(α)\overline{f(n)} = T(\alpha)f(n)?=T(α)是關于α=12\alpha=\frac{1}{2}α=21?對稱的。
2. f(n) ̄=T(α)\overline{f(n)} = T(\alpha)f(n)?=T(α)的凹凸性與t1(α)=αf(αn)t_1(\alpha) = \alpha f(\alpha n)t1?(α)=αf(αn)相同。
那么如果f(n) ̄=T(α)\overline{f(n)} = T(\alpha)f(n)?=T(α)分別是凸函數(1)、凹函數(3)、非凹非凸(常函數)(2),他們的圖像分別是什么樣呢?如下所示,再加上對稱性的條件,很容易得到(用凹凸函數的定義寫一下不等式就行了):在凸函數情況下,α=12\alpha=\frac{1}{2}α=21?取最大值;凹函數下α=12\alpha=\frac{1}{2}α=21?取最小值;非凹非凸函數隨意,任何值處的結果都相同。
??那么T(α)T(\alpha)T(α)或者說t1(α)=αf(αn)t_1(\alpha)= \alpha f(\alpha n)t1?(α)=αf(αn)在什么時候是凹函數,什么時候是凸函數呢?對于一個規模為nnn的問題,其復雜度只能是:常數、log(n)log(n)log(n)或nm(m>0)n^m(m>0)nm(m>0),當:
而我們實際遇到的問題中,絕大多數算法或數據結構問題都屬于以上的第二種種情況(畢竟復雜度和問題規模無關的問題我們幾乎不會單獨去討論),所以這種前提被默認滿足了,因此五五對分是合理的選擇。
總結
以上是生活随笔為你收集整理的二分法采用五五分平均复杂度最小(相比四六分或三七分等)的定量证明方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPU 编程入门到精通(五)之 GPU
- 下一篇: 详解CUDA核函数及运行时参数