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