Recentemente ho partecipato a un'intervista. In che ho dovuto risolvere il problema per la generazione di un miliardo di numeri univoci casuali.
Ad esempio la firma del metodo è la seguente:
public Iterator<Long> generate(final long N, final Random rand){
}
L'iteratore restituito deve contenere N numeri casuali univoci.
Questo metodo verrà testato contro 10 miliardi come N e si dispone solo di memoria JVM da 128 MB.
Come lo faresti.?
Sono venuto con la risposta di sotto che ha detto che potrei me 1 o 2 istanze che il numero potrebbe ripetere. Come potrei garantire. Ad esempio: problema del paradosso del compleanno.
La mia soluzione:
public Iterator<Long> generate(long N, Random rand) {
LongStream stream = rand.longs(N);
return stream.iterator();
}
Purtroppo non ho seguito un processo di intervista dal momento che era poco tempo. Ma voglio ancora sapere come gestiremo efficientemente 10 miliardi di generazione casuale unica.