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