1、概述
在解決一些複雜問題,特別是解決一些規模較大的問題時,常常將問題進行分解。具體來說,
就是將乙個規模較大的問題分割成規模較小的同類問題,然後將這些小的問題逐個加以解決,
最終也就將整個大的問題解決了。這種分而治之的思想稱為分治的思想。
所謂遞迴演算法,就是一種直接或間接地呼叫原演算法本身的一種演算法。遞迴與分治的演算法思想
往往相伴而生。
2、問題例項
例:求正整數不同的劃分個數。
1)問題解釋:將乙個正整數n表示成一系列正整數之和:
n=n1+n2+......+nk
稱為正整數n的乙個劃分。求正整數n的不同劃分個數。
2)問題分析
根據正整數劃分的定義,可以總結出一下規律:
設標記p(n,m)表示正整數n的所有不同劃分中,最大加數不大於m的劃分個數。
如:p(6,2)表示6的最大加數不大於2的所有劃分
p(n,1)=1, n>=1;
正整數n的劃分中加數不大於1的劃分數只有一種
p(n,m)=p(n,n), m>=n;
不存在最大加數大於n的正整數n的劃分
p(n,n)=p(n,n-1)+1
最大加數為n的正整數n的劃分只有一種
p(n,m)=p(n,m-1)+p(n-m,m), n>m>1;
p(n,m)=p(n,m-1)+n的最大加數為m的劃分個數
n的最大加數為m的劃分個數記為:q(n,m)
則q(n,m)=p(n-m,m),因為n-m的劃分的個數決定了q(n,m)的
劃分個數,又q(n,m)中最大加數為m所以n-m的劃分中最大加數
也為m。故q(n,m)=p(n-m,m),即,p(n,m)=p(n,m-1)+p(n-m,m)
根據以上規律可以寫出遞迴程式:
view code
1int p(int n, int m)
2
演算法思想之分治遞迴策略
摘自 鄒恒明 演算法之道 採取分治策略解決問題有三個步驟 1 將問題分解為若干個小的子問題。每個子問題和大問題同型,但規模更小。2 遞迴解決這些問題。3 將子問題的解答合併,並獲得大問題的解答。第二步中 遞迴解決這些子問題 指的是按照同樣的分治策略進行求解,即通過將這些子問題分解到更小的孫子問題來進...
分治思想之排序演算法
分而治之是設計高效演算法的乙個重要思想。本文主要總結一下分治思想在排序演算法中的運用。排序在商業資料處理和現代科學計算中有著重要的地位,它能夠應用於事物處理 組合優化 天體物理學 分子動力學 語言學 基因組學 天氣預報和很多其它領域。演算法 發展至今,已經出現過很多的排序演算法。如選擇排序,插入排序...
資料結構與演算法(3) 遞迴與分治思想
遞迴思想 遞迴就是有去 遞去 有回 歸來 有去 是指 遞迴問題必須可以分解為若干個規模較小,與原問題形式相同的子問題,這些子問題可以用相同的解題思路來解決,就像鑰匙可以開啟所有門上的鎖一樣 有回 是指 這些問題的演化過程是乙個從大到小,由近及遠的過程,並且會有乙個明確的終點 臨界點 一旦到達了這個臨...