Domanda

L'altro giorno ho deciso di scrivere un'implementazione di radix sort in Java. Si suppone che l'ordinamento Radix sia O (k * N) ma il mio ha finito per essere O (k ^ 2 * N) a causa del processo di scomposizione di ogni cifra in un numero. Ho scomposto ogni cifra modificando (%) le cifre precedenti e dividendole per dieci per eliminare le cifre successive. Ho chiesto al mio professore se ci sarebbe stato un modo più efficiente per farlo e lui ha detto di usare operatori bit. Ora per le mie domande: quale metodo sarebbe il più veloce per abbattere ogni numero in Java, 1) Metodo indicato sopra. 2) Converti il ??numero in String e usa sottostringhe. 3) Utilizzare le operazioni a bit.

Se 3) come funzionerebbe?

È stato utile?

Soluzione

Come suggerimento, prova a utilizzare una radice diversa da 10, poiché i computer gestiscono l'aritmetica binaria meglio dei decimali.

  • x > > > n è equivalente a x / 2 n
  • x & amp; (2 n - 1) equivale a x% 2 n

A proposito, Java è > > esegue l'estensione del segno, che probabilmente non è quello che vuoi in questo caso. Usa > > > invece.

Altri suggerimenti

[ http://en.literateprograms.org/Radix_sort_(Java) ] ( http://en.literateprograms.org/Radix_sort_ (Java))

La riga di codice che esegue ciò;

 int key = (a[p] & mask) >> rshift;

è la parte di manipolazione dei bit.

& amp; è l'operatore che esegue un AND bit per bit e > > è uno spostamento a destra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top