在 n 個元素中找出最大元素和最小元素:
我們先使用樸素演算法:
#includeusing namespace std;
#define maxsize 200
int main()
int max,min;
max = min = a[0];
for(int j=1;jmax?a[j]:max;
min = a[j]>min?min:a[j];
} cout《在獲得最大最小值時對於n個數我們需要比較2(n-1)次 ,也就是說時間複雜度為2(n-1)
接下來我們用分治策略來處理這道題
t(n) = 2t(n/2) + θ(1) n>1
t(n) = θ(1) n=1
對於這n個數,我們分為兩組,分別求出每一組的最大值和最小值,再比較這兩組的最大值與最小值,使用遞迴即可簡單的解決問題
直接上**:
#include#define maxsize 200
#define max(a,b) a>b?a:b;
#define min(a,b) a>b?b:a;
using namespace std;
void max_min(int i,int j,int &max,int &min,int a)
else
}else if(j==i)//遞迴的截止條件2(當n為奇數時)
else }
int main()
int max,min;
max_min(0,n-1,max,min,a);
cout<
分治的思想
題目如下 趙老師真強 分治的基本條件就是能將乙個大問題轉化為若干具有相同或相似性質的小問題。這個題就是乙個很好的例子 在後半段中提取乙個公因子。是的因式分解後某一括號內的多項式和之前的有重疊。這樣就可以如此遞迴下去,直到到了邊界條件。這樣,就將o n 的演算法降到o logn 級別,速度大大增加。i...
遞迴和分治思想及其應用
更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治思想。...
遞迴和分治思想及其應用
目錄 更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治...