Angenommen, ich habe Ganzzahlen mit fester Breite (dh sie passen in ein Register der Breite w ), a 1 , a 2 , ... a n, so dass ihre Summe a 1 + a 2 + ⋯ + a n = S auch in ein Register passt der Breite w .
Es scheint mir, dass wir die Zahlen immer auf vertauschen können, so dass jede Präfixsumme S i = b 1 + b 2 + ⋯ + b i auch in ein Register der Breite w passt .
Grundsätzlich besteht die Motivation darin, die Summe auf Registermaschinen mit fester Breite zu berechnen , ohne sich in irgendeiner Zwischenstufe um Ganzzahlüberläufe sorgen zu müssen.
Gibt es einen schnellen (vorzugsweise linearen) Algorithmus, um eine solche Permutation zu finden (unter der Annahme des als Eingabearray gegeben ist)? (oder sagen Sie, wenn eine solche Permutation nicht existiert).
-2^(n-1)
bis auswählen 2^(n-1)-1
. Es erfordert natürlich das Zweierkomplement und ein klar definiertes Überlaufverhalten, aber in einer Sprache wie C # sollte es funktionieren.