3 Stimmen

Wie lässt sich der Durchschnitt einer großen Anzahl von ganzen Zahlen optimal ermitteln?

Jede der Ganzzahlen kann so groß sein wie eine Ganzzahl selbst (Java int-32 Bits), so dass das Speichern der Summe der Ganzzahlen in einer Ganzzahlvariablen keine Option ist. Ich befürchte, dass die Verwendung von Java BigInts die Leistung stark beeinträchtigen könnte.

Im Moment versuche ich, zu teilen und zu erobern, indem ich lang um die Summe zu speichern.

Gibt es bessere Lösungen?

6voto

Sie können long (64-Bit) verwenden, um die Summe zu speichern. Wenn Sie das überschreiten, ist BigInteger die richtige Wahl.

5voto

Andrew White Punkte 51732

BigInt ist ziemlich schnell. Wie ich immer sage, erst richtig machen, dann profilieren und optimieren.

4voto

Nikita Rybak Punkte 66202

Wie wäre es mit long Datentyp? Es sollte sogar auf 32-Bit-Maschinen ziemlich schnell sein.

2voto

mb14 Punkte 21522

Sie können Fließkommazahlen verwenden und das Ergebnis dann wieder in eine Ganzzahl umwandeln. Das ist zwar nicht optimal, sollte aber schnell genug (und unkompliziert) sein

2voto

biziclop Punkte 47795

Wenn Sie die Anzahl der zu mittelnden Ints im Voraus kennen, können Sie die Division einzeln durchführen

int [] a;
int average;
int remainder;
int alen = a.length;

for( int i = 0; i < alen; i++ ) {
  int q = a[i] / alen;  //calculate the quotient and the remainder for the current element
  int r = a[i] % alen;
  average += q; // add up the averages and the remainders
  remainder += r;
  if( remainder >= alen ) { //roll the average over if needed 
    remainder -= alen;
    average++;
  }
}

In der Praxis spielt das natürlich keine Rolle, denn man kann nicht mehr als 2 31 Elemente in einem Array, was bedeutet, dass Sie die Summe in einem long .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X