[英]Does anyone know why my quick sort algorithm is getting a stack overflow error on large data sets ex. an array of length 100,000?
[英]Calculating the average median of a large array (up to 100,000 elements)
我有一個很大的數組,需要用來計算平均中位數。 我必須使用遞歸,沒有循環,除了.length之外也沒有點操作。
數組最多只能分解為3個,分解的方式是:
一旦數組超過較小的值,我就對遞歸應該如何工作感到困惑。 到目前為止,這就是我所擁有的,
public static double medianAverage(double a, double b, double c) {
if ((a < b && b < c) || (c < b && b < a))
return b;
else if ((b < a && a < c) || (c < a && a < b))
return a;
else if(a == c) return b;
else if(b == c) return a;
else if(a == b) return c;
else
return c;
}
/**
* @return Returns median average
*/
public static double medianHelper(int[] a, int range, int start, int end) {
double avg = 0;
int n = range / 3;
// Base Cases:
if(range == 1) return a[start];
if(range == 2) return (a[start] + a[start + 1]) / 2.0;
if(range == 3) return medianAverage(a[start], a[start + 1], a[start + 2]);
if(range > 3) {
if(range % 3 == 0) {
double p1 = medianHelper(a, n, start, n);
double p2 = medianHelper(a, n, n, n * 2);
double p3 = medianHelper(a, n, n * 2, n * 3);
return medianAverage(p1, p2, p3);
}
if(range % 3 == 1) {
// TODO: Implement
}
if(range % 3 == 2) {
// TODO: Implement
}
}
return avg;
}
public static double median3(int[] a) {
return medianHelper(a, a.length, 0, a.length);
}
非常感謝您的任何幫助,謝謝。
range = 3n
。 根據規則,您可以將數組划分為[0, n]
, [n + 1, 2n]
和[2n + 1, 3n]
。 在這種情況下,每個塊的大小為n
。 range = 3n + 1
。 根據規則,可以將數組分為[0, n]
, [n + 1, 2n + 1]
和[2n + 2, 3n + 1]
。 第一塊和最后一塊的大小為n
,中間塊的大小為n + 1
。 range = 3n + 2
。 根據規則,您可以將數組划分為[0, n + 1]
, [n + 2, 2n + 1]
和[2n + 2, 3n + 2]
。 第一塊和最后一塊的大小為n + 1
,中間一塊的大小為n
。 將數組分成3個部分后,可以遞歸地嘗試查找每個部分的中值。 我對中位數的處理方式感到困惑,但我會讓您弄清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.