我知道這是一個愚蠢的問題,但我沒有得到這一點。 在此代碼從http://somnathkayal.blogspot.in/2012/08/finding-maximum-and-minimum-using.html使用分治法找出最大和最小值
public int[] maxMin(int[] a,int i,int j,int max,int min) {
int mid,max1,min1;
int result[] = new int[2];
//Small(P)
if (i==j) max = min = a[i];
else if (i==j-1) { // Another case of Small(P)
if (a[i] < a[j]) {
this.max = getMax(this.max,a[j]);
this.min = getMin(this.min,a[i]);
}
else {
this.max = getMax(this.max,a[i]);
this.min = getMin(this.min,a[j]); }
} else {
// if P is not small, divide P into sub-problems.
// Find where to split the set.
mid = (i + j)/2;
// Solve the sub-problems.
max1 = min1 = a[mid+1];
maxMin(a, i, mid, max, min);
maxMin(a, mid+1, j, max1, min1);
// Combine the solutions.
if (this.max < max1) this.max = max1;
if (this.min > min1) this.min = min1;
}
result[0] = this.max;
result[1] = this.min;
return result;
}
}
採取比方說陣列是8,5,3,7,我們必須找到最大和最小,最大 的初始值和最小值= ARR [0] = 8; 第一次清單將被劃分爲8,5 我們稱之爲最大最小,最大= 8分鐘= 8,因爲我== J-1,我們將得到最大= 8,最小= 5,
下一次名單將分爲[3,7], min1 = max1 = arr [mid + 1] = 3, 我們稱MaxMin的最大值爲3,最小值爲3.因爲我等於j-1,我們將得到max = 7,分= 3,
接着比較是MAX1,max和MIN1,最小值之間執行, 這是我的混亂, MAX的值,在這裏分別MAX1爲8和7,但如何??? 我們沒有修改MAX1任何地方,它就會怎麼也得值7,
按我的理解,我們曾呼籲MAXMIN,最大= 3分= 3,然後更新最大= 7分鐘= 3,但我們沒有返回這些更新的值,那麼max1和min1的值如何得到更新, 我卡在這裏,請解釋一下。 謝謝。
當您調用this.mix和this.max時,是否有外部最小值和最大值? – Fabich
@ Lordofdark - 這裏是鏈接到代碼http://somnathkayal.blogspot.in/2012/08/finding-maximum-and-minimum-using.html –
我不會把這個代碼稱爲「分而治之」 - 在感覺它在理論效率方面等同於單循環,在現實生活效率(額外函數調用)方面更差,並且更加冗長。它確實細分了問題,但與顯而易見的替代方法相比,它征服的很少。二進制搜索,Karatsuba,FFT - 是更好的例子。 – tucuxi