Permutazioni senza ripetizione Visual Basic

Questa funzione restituisce tutte le possibili n combinazioni senza ripetizione di una sequenza di n caratteri.
La velocita di elaborazione e restituzione del risultato dipende dal numero di caratteri inseriti e dal numero di ripetizioni degli stessi.
in realta questa funzione puo essere ottimizzata ulteriormente,
sicuramente la prima cosa da fare sarebbe quella di tradurla in un’altro linguaggio
magari funzionale (Lisp,ecc…) e magari non visuale (Pascal,C,fortran,ecc…).

 

Sorgente:

 

Private Sub cmdperm_Click()

  If txtperm.Text = “” Then

    MsgBox (“Inserire Caratteri”)

  Else

    lstperm.Clear

    Call permuta(“”, txtperm.Text)

  End If

End Sub

 

 

Sub permuta(t As String, s As String)

  If Len(s) = 1 Then

     lstperm.AddItem (t + s)

  Else

     Call permuta(t + Left(s, 1), Mid(s, 2))

     For i = 2 To Len(s)

       s0 = Left(s, 1)

       si = Mid(s, i, 1)

       If s0 <> si Then

         s = si + IIf(i > 2, Mid(s, 2, i – 2), “”) + s0 + _

          IIf(i + 1 <= Len(s), Mid(s, i + 1), “”)

         Call permuta(t + Left(s, 1), Mid(s, 2))

       End If

     Next

  End If

End Sub

pa007

Founder di Pa007World. Laureato in Ingegneria Informatica all'Università di Pisa e studente di Master of Science in Embedded Computing Systems presso la Scuola Superiore Sant'anna e l'Università di Pisa. Appassionato da sempre di informatica e tecnologia. Home page: http://www.pa007world.com