venerdì 26 settembre 2014

Algoritmi di rimescolamento: Knuth.

Vediamo questo "algoritmo di Knuth"...

Ecco: sono riuscito a costruire una routine che, credo, operi secondo questo algoritmo:
Sub funzione()
    Dim carte(3) As Integer
    carte(0) = 123
    carte(1) = 234
    carte(2) = 345
    carte(3) = 456
    Dim i As Integer, j As Integer
    Dim tampone As Integer
    i = 3
    Do While i <> 0
        j = Int(Rnd() * i)
        tampone = carte(j)
        carte(j) = carte(i)
        carte(i) = tampone
        i = i - 1
    Loop
        
    For k = 0 To 3
        Debug.Print carte(k)
    Next k
    Debug.Print "----------------------"
End Sub
Ed ecco una serie di "rimescolamenti"
 345 
 456 
 234 
 123 
----------------------
 234 
 456 
 123 
 345 
----------------------
 456 
 123 
 234 
 345 
----------------------
 456 
 123 
 234 
 345 
----------------------
 234 
 456 
 123 
 345 
----------------------
 234 
 456 
 123 
 345 
----------------------
 456 
 345 
 123 
 234 
----------------------
 456 
 345 
 123 
 234 
----------------------
 456 
 123 
 234 
 345 
----------------------
 456 
 123 
 234 
 345 
----------------------
 456 
 123 
 234 
 345 
----------------------
 456 
 345 
 123 
 234 
----------------------
 234 
 456 
 123 
 345 
----------------------
 234 
 345 
 456 
 123 
----------------------
 234 
 345 
 456 
 123 
----------------------
 456 
 345 
 123 
 234 
----------------------
 234 
 456 
 123 
 345 
----------------------
 234 
 345 
 456 
 123 
----------------------
Sembra che siano abbastanza "casuali"!

Nessun commento:

Posta un commento