Domanda

Ho bisogno di un algoritmo che mi dia numeri interi con le seguenti caratteristiche:

  • I numeri devono essere in un determinato intervallo $ [n..m] $;

  • I numeri devono essere restituiti in ordine pseudo-casuale (è sufficiente l'ispezione visiva; è più importante che i numeri siano ben distribuiti nell'intervallo dato);

  • I numeri non possono ripetere prima che ogni numero nell'intervallo $ [n..m] $ sia stato restituito una volta;

  • La gamma può essere enorme (fino a $ 2^{64} $; questo esclude tutti gli algoritmi basati su elenco/shuffle);

  • Dovrebbe essere possibile seminare la funzione in modo che restituisca i numeri in ordine diverso alla ripetizione;

  • L'algoritmo dovrebbe essere il più veloce possibile e dovrebbe tornare in tempo costante.

Ho scritto codice che utilizza lo scambio di bit in base alla tabella e facoltativamente XOR e/o aggiunta. Funziona molto bene per $ n $ e $ m $. Tuttavia è un po 'lento e se l'intervallo $ n..m $ non è allineato a bit (cioè $ n $ diverso da $ 2^x $ e $ m $ diverso da $ 2^y $), ottengo entrambi i lacune all'interno I numeri restituiti o un comportamento di runtime estremamente non costante.

Come può essere risolto?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top