我想了解以下算法是如何工作的。划分并征服算法来查找数组的最大元素
#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,并返回一些元素,但不是最大值。对于第二个子数组,我们也可以这样说。
这个算法的主要思想是什么?
是的,我知道这是递归的最大元素搜索我只需要要了解它是如何发现的最大我正在试图做的纸一些工作,但没有任何结果 –
你的问题是完全不知所云。我试图改进它,但我真的不知道从哪里开始。请使用段落和适当的格式。 –
@康拉德鲁道夫我的问题是比较是写在最后一行是否正确? –