sql >> Databasteknik >  >> RDS >> Mysql

Algoritm för att generera ett slumptal

Nej din algoritm är inte skalbar. Vad jag har gjort tidigare är att utfärda nummer i serie (+1 varje gång) och sedan skicka dem genom en XOR-operation för att blanda ihop bitarna och därmed ge mig ett till synes slumpmässigt tal. Naturligtvis är de inte riktigt slumpmässiga, men de ser så ut för användarnas ögon.

[Redigera] Ytterligare information

Denna algoritms logik går så här att du använder en känd sekvens för att generera unika nummer och sedan manipulerar du dem deterministiskt så att de inte ser seriella ut längre. Den allmänna lösningen är att använda någon form av kryptering, som i mitt fall var en XOR-flipflop, eftersom den är så snabb som den kan bli, och den uppfyller garantin att siffror aldrig kommer att kollidera.

Men du kan använda andra former av kryptering, om du vill föredrar ännu fler slumpmässiga siffror, framför hastighet (säg att du inte behöver generera många id åt gången). Nu är den viktiga punkten med att välja en krypteringsalgoritm "garantin att siffror aldrig kommer att kollidera". Och ett sätt att bevisa om en krypteringsalgoritm kan uppfylla denna garanti är att kontrollera om både det ursprungliga numret och resultatet av krypteringen har samma antal bitar, och att algoritmen är reversibel (bijection).

[Tack till Adam Liss &CesarB för att utveckla lösningen]



  1. php-begränsningsöverträdelse Fel 1452

  2. mySQL regex i where-satsen

  3. Hur tilldelar man ett exec-resultat till en sql-variabel?

  4. Kan du lägga till ett if-uttalande i ORDER BY?