1. 分治法能解決的問題通常具備什麼特徵
2. 解空間樹的動態搜索過程
3. 遞歸優勢?那爲何有的問題還要用非遞歸算法
動態規劃法與分治法的異同、動態規劃法與貪心法的異同、分支限界與回溯數組
分析性能特色。
例,填表:動態規劃法
畫圖:貪心法求TSP、圖着色,回溯法、分支限界法性能
五、a.爲一個分治算法編寫僞代碼,該算法同時求出一個n元數組的最大元素和最小元素的值。
b.請拿該算法與解一樣問題的蠻力算法作一個比較。
解:
a.同時求出最大值和最小值,只須要將原數組一分爲二,再使用相同的方法找出這兩個部分中的最大值和最小值,而後通過比較就能夠獲得整個問題的最大值和最小值。 spa
算法 MaxMin(A[l..r],Max,Min)
//該算法利用分治技術獲得數組A中的最大值和最小值
//輸入:數值數組A[l..r]
//輸出:最大值Max和最小值Min
if(r=l) Max←A[l];Min←A[l]; //只有一個元素時
else
if r-l=1 //有兩個元素時
if A[l]≤A[r] Max←A[r]; Min←A[l]
else Max←A[l]; Min←A[r]
else //r-l>1
MaxMin(A[l,(l+r)/2],Max1,Min1); //遞歸解決前一部分
MaxMin(A[(l+r/)2+1..r],Max2,Min2); //遞歸解決後一部分
if Max1<Max2 Max= Max2
//從兩部分的兩個最大值中選擇大值
if Min2<Min1 Min=Min2;
//從兩部分的兩個最小值中選擇小值
}設計
b.蠻力法的算法以下:
算法 simpleMaxMin(A[l..r])
//用蠻力法獲得數組A的最大值和最小值
//輸入:數值數組A[l..r]
//輸出:最大值Max和最小值Min
Max=Min=A[l];
for i=l+1 to r do
if A[i]>Max Max←A[i];
else if A[i]<Min Min←A[i]
return Max,Min
}
時間複雜度t(n)=2(n-1)
算法分治算法的時間複雜度爲3n/2-2,蠻力法的時間複雜度爲2n-2,都屬於Θ(n),但比較一下發現,分治算法的速度要比蠻力法的快一些。3d
求衆數:
衆數是在一組數據中,出現次數最多的數據,是一組數據中的原數據,而不是相應的次數。
一組數據中的衆數不止一個,
如數據二、三、-一、二、一、3中,二、3都出現了兩次,它們都是這組數據中的衆數。 通常來講,一組數據中,出現次數最多的數就叫這組數據的衆數。例如:1,2,3,3,4的衆數是3。
可是,若是有兩個或兩個以上個數出現次數都是最多的,那麼這幾個數都是這組數據的衆數。
例如:1,2,2,3,3,4的衆數是2和3。
還有,若是全部數據出現的次數都同樣,那麼這組數據沒有衆數。
例如:1,2,3,4,5沒有衆數。對於給定的由n個天然數組成多重數集S,計算S的衆數及其重數。blog
設計思路 :利用快速排序將數據集S排序,再遍歷整個數組,利用Number類記錄每一個數出現的頻率,從而找出集合的衆數和重數。排序
用動態規劃法求解TSP問題:求從1出發,通過2,3,4再回到1的最短路徑長度。遞歸
回溯法搜索
最優解爲(1,2,1,2,3)