簡體   English   中英

計算大型數組的平均中位數(最多100,000個元素)

[英]Calculating the average median of a large array (up to 100,000 elements)

我有一個很大的數組,需要用來計算平均中位數。 我必須使用遞歸,沒有循環,除了.length之外也沒有點操作。

數組最多只能分解為3個,分解的方式是:

  • 0的余數:每段應為[n / 3]個元素。
  • 1的余數:第一部分和最后一塊應為[n / 3]元素四舍五入,中間部分應為[n / 3]元素四舍五入
  • 2的余數:第一部分和最后一塊應為[n / 3]元素四舍五入,中間部分應為[n / 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);

 }

非常感謝您的任何幫助,謝謝。

  • 剩余的0表示range = 3n 根據規則,您可以將數組划分為[0, n][n + 1, 2n][2n + 1, 3n] 在這種情況下,每個塊的大小為n
  • 余數1表示range = 3n + 1 根據規則,可以將數組分為[0, n][n + 1, 2n + 1][2n + 2, 3n + 1] 第一塊和最后一塊的大小為n ,中間塊的大小為n + 1
  • 余數2表示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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM