Pseudo casuali, numeri interi nonque in un determinato intervallo
-
04-11-2019 - |
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