我想了解以下算法是如何工作的。劃分並征服算法來查找數組的最大元素
#include <iostream>
using namespace std;
int maxsimum(int a[], int l, int r) {
if (l == r)
return a[l];
int m = (l+r)/2;
int u = maxsimum(a,l,m);
int v = maxsimum(a,m+1,r);
return u>v?u:v;
}
int main() {
int a[] = {34,23,45,56,30,31,57,33,55,10};
int n = sizeof(a)/sizeof(int);
cout << maxsimum(a,0,n) << endl;
return 0;
}
首先,我感興趣的是,儘管算法的正常工作,它是神祕的對我來說,如何找到最大元素。我會告訴我如何理解這個算法:
第1步:我們說一個數組的情況下,l=0
和r=10
,它會檢查if (l>r)
所以計算m=(0+10)/2;
這不成立,當然。然後再次執行新的界限。第一對是(0,5),第二對是(6,10),並且在最終操作之後,它比較兩個返回值並最終返回它們之間的最大元素。
此算法是否總能正常工作?在每次迭代中,它都不做任何比較,只是最後一步。它如何確定每次遞歸迭代的最大元素?它只檢查什麼。例如:取對(0,5),是(0大於5)?不,再重複一遍,將這些邊界分成兩部分,然後再次得到新的平均值m1 =(0 + 5)/ 2,並返回一些元素,但不是最大值。對於第二個子數組,我們也可以這樣說。
這個算法的主要思想是什麼?
是的,我知道這是遞歸的最大元素搜索我只需要要了解它是如何發現的最大我正在試圖做的紙一些工作,但沒有任何結果 –
你的問題是完全不知所云。我試圖改進它,但我真的不知道從哪裏開始。請使用段落和適當的格式。 –
@康拉德魯道夫我的問題是比較是寫在最後一行是否正確? –