算法思想之分治遞歸策略

摘自 鄒恆明《算法之道》

 

 

採取分治策略解決問題有三個步驟:

(1) 將問題分解爲若干個小的子問題。每個子問題和大問題同型,但規模更小。

(2) 遞歸解決這些問題。

(3) 將子問題的解答合併,並獲得大問題的解答。

        第二步中“遞歸解決這些子問題”指的是按照同樣的分治策略進行求解,即通過將這些子問題分解到更小的孫子問題來進行求解。就這樣一直分解下去,直到分解出來的子問題簡單到只用常數操作時間就可解決爲止。而遞歸是彰顯遞歸優勢的放大器。如果沒有遞歸,那麼分治策略的效果不是沒有就是微不足道。就像我們分治乘法運算,如果只分解一次,效率改善不足掛齒。

        在分解到子問題規模達到微不足道的境界,子問題的就可以用常數時間來求得。然後我們反照遞歸順序由低至上將子問題的解合併起來,逐級上推就構成原問題的解。

        在分而治之的策略下,真正的工作也由上述三個步驟組成,即所有的工作分散至這三個地方:分解部分、遞歸部分和合並部分。而整個分而治之策略的時間複雜性也由這三項的時間複雜性之和構成。由於不斷遞歸後,最後子問題將變得極爲簡單,能夠輕而易舉地解決,其解決的時間複雜性在整個策略中的比重微乎其微,可以忽略不計。因此,分而治之策略的真正成本實際上是由分解和合並兩個部分構成,即到底有分解多少次,每次分解的子問題數到底是多少?到底要合併多少次,每次分解與合併需要多少時間?其中最爲關鍵的是分解出來的子問題數、每個子問題的大小,以及分解和合並本身的時間成本。這些是決定分而治之策略是否奏效的決定因素。因此優良的分解合併策略就十分重要

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章