Mysql
 sql >> Database >  >> RDS >> Mysql

Algoritmo per la generazione di un numero casuale

No, il tuo algoritmo non è scalabile. Quello che ho fatto prima è emettere numeri in serie (+1 ogni volta) e quindi passarli attraverso un'operazione XOR per confondere i bit dandomi così numeri apparentemente casuali. Ovviamente non sono davvero casuali, ma sembrano così agli occhi degli utenti.

[Modifica] Informazioni aggiuntive

La logica di questo algoritmo funziona in questo modo:usi una sequenza nota per generare numeri univoci e poi li manipoli deterministicamente, in modo che non sembrino più seriali. La soluzione generale è utilizzare una qualche forma di crittografia, che nel mio caso era un flipflop XOR, perché è il più veloce possibile e soddisfa la garanzia che i numeri non si scontreranno mai.

Tuttavia puoi usare altre forme di crittografia, se vuoi preferire numeri dall'aspetto ancora più casuale, oltre la velocità (diciamo che non è necessario generare molti ID alla volta). Ora il punto importante nella scelta di un algoritmo di crittografia è "la garanzia che i numeri non si scontreranno mai". E un modo per provare se un algoritmo di crittografia può soddisfare questa garanzia è verificare se sia il numero originale che il risultato della crittografia hanno lo stesso numero di bit e che l'algoritmo è reversibile (biiezione).

[Grazie a Adam Liss &CesarB per espandere la soluzione]