在計算機(jī)科學(xué)中,分治法(Divide and Conquer,DAC)是建基于多項分支遞歸的一種很重要的算法范型。字面上的解釋是“分而治之”,就是把一個復(fù)雜的問題分成兩個或更多的相同或相似的子問題,直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。
它分為三個階段:
分解——將問題分解為子問題;
解決——使用遞歸解決子問題;
合并——將子問題的結(jié)果合并到最終解決方案中。
它能用來干什么?
DAC 的一種實際應(yīng)用是使用多個處理器的并行編程,因此子問題在不同的機(jī)器上執(zhí)行。
DAC 是許多高效算法的基礎(chǔ),例如:如排序算法(歸并排序、快速排序)、傅立葉變換(快速傅立葉變換)、二進(jìn)制搜索等。
特性
每個 DAC 問題都可以寫成遞歸關(guān)系;因此,找到停止遞歸的基本情況至關(guān)重要。
它的復(fù)雜度為 T(n)= D(n) + C(n) + M(n),這意味著每個階段的復(fù)雜度取決于問題。