Supponiamo che mi vengano dati numeri interi a larghezza fissa (cioè si inseriscano in un registro di larghezza w ), a 1 , a 2 , ... a n tale che la loro somma a 1 + a 2 + ⋯ + a n = S si inserisca anche in un registro di larghezza w .
Mi sembra che possiamo sempre permutare i numeri per tale che ogni somma prefisso S i = b 1 + b 2 + ⋯ + b i rientra anche a un registro di larghezza w .
Fondamentalmente, la motivazione è calcolare la somma su macchine a registro a larghezza fissa senza doversi preoccupare di overflow di numeri interi in qualsiasi fase intermedia.
C'è un rapido (tempo preferibilmente aria) algoritmo per trovare una tale permutazione (assumendo che il sono date come un array input)? (o dire se tale permutazione non esiste).
-2^(n-1)
a 2^(n-1)-1
. Naturalmente richiede il complemento a due e un comportamento di overflow ben definito, ma in un linguaggio come C # dovrebbe funzionare.