1. 程式人生 > >遞歸與分治

遞歸與分治

我們 ... 無法 進行 最好 計算機 nan 合成 得到

? 很小的時候,我就很好奇,我大天朝\(13\)億人,人口普查怎麽查出來的。

? 然後我腦補了一下,一個苦行僧手裏拿著一本冊子從南走到北,從白走到黑,碰到一個人就畫正字。然後用雙腳丈量一波全國的土地,統計出我國人口。

? 這剛剛好也能解釋,為啥人口普查那麽久才進行一次了。因為統計員統計一次要很多年。

? 當然,這也只是一個笑話罷了,計算機的能力很強大的。

? 所謂遞歸,就是程序自己調用自己去解決自己的子問題。某些問題在大局面上無法直接解決,但是可以將其劃分成一個一個子問題,不斷劃分下去就可以從局面極小的子問題直接得到答案,然後再反過來一路拼上來。這種思想,就叫分治,分而治之。計算機實現分治的最好辦法,就是遞歸。

? 比如人口普查,設\(CalcPeopleCnt(area)\)來計算某地區的人口數。顯然,直接得到\(CalcPeopleCnt(China)\)並不現實。所以我們就要各省級單位進行本省統計,就是\(CalcPeopleCnt(Hunan)+......\)之類的。再細分到市,縣,區等等。統計一個小區或者村莊有多少人可以交給居委會直接“暴力”求得答案,再一級一級反饋上去合成大範圍的答案,那麽最後整個中國有多少人就可以很快得出來了。

? 這種“大事化小,小事化了”的思想,在\(OI\)中有很大的運用,關於很多東西都會用到這種思想,所以分治,極為重要。

遞歸與分治