vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Preisser
Datum: 13.02.12 21:38

Hallo,

alternativ ein rekursiver Ansatz:
    ''' <summary>
    ''' Ruft für jede Permutation der Elemente aus arr den angegebenen Delegat
    ''' auf.
    ''' </summary>
    ''' <typeparam name="T">der Typ des Arrays</typeparam>
    ''' <param name="arr">das Array</param>
    ''' <param name="act">Ein Delegat vom Typ Action(Of T()), der für
    ''' jede Permutation aufgerufen werden soll</param>
    ''' <remarks></remarks>
    Public Shared Sub ForEachPermutation(Of T)(arr As T(), _
            act As Action(Of T()))
        Dim newArray As T() = New T(arr.Length - 1) {}
        Dim indexes As Integer() = New Integer(arr.Length - 1) {}
        Dim taken As Boolean() = New Boolean(arr.Length - 1) {}
 
        ForEachPermutationRek(arr, act, indexes, taken, 0, newArray)
    End Sub
 
    Private Shared Sub ForEachPermutationRek(Of T)(arr As T(), act As Action(Of _
      T()), indexes As Integer(), taken As Boolean(), pos As Integer, newArray _
      As T())
        For i As Integer = 0 To arr.Length - 1
            ' Schauen, ob die POsition belegt is
            If Not taken(i) Then
                taken(i) = True
                indexes(pos) = i
                If pos < arr.Length - 1 Then 'rekursiv aufrufen
                    ForEachPermutationRek(arr, act, indexes, taken, pos + 1, _
                      newArray)
                Else
                    'neues Array füllen und die Action aufrufen
                    For j As Integer = 0 To arr.Length - 1
                        newArray(j) = arr(indexes(j))
                    Next
                    act.Invoke(newArray)
                End If
                taken(i) = False
            End If
        Next
    End Sub
Der Funktion ForEachPermutation kann dann ein Array vom Typ T übergeben werden, sowie ein Action(Of T()), das für jede Permutation aufgerufen wird und ein Array mit den neuen Elementen enthält. Ein Aufruf
    Dim arr As Integer() = {1, 2, 3}
 
    Dim ausgabeNr As Integer = 0
    ForEachPermutation(arr, _
        Sub(array As Integer())
            ausgabeNr += 1
            Debug.WriteLine("Permutation " & ausgabeNr & ": " & String.Join( _
              ",", array))
        End Sub)
erzeugt dann z.B. die Ausgabe:
Permutation 1: 1,2,3
Permutation 2: 1,3,2
Permutation 3: 2,1,3
Permutation 4: 2,3,1
Permutation 5: 3,1,2
Permutation 6: 3,2,1
Auch hier müsste man dann z.B. unterschiedliche Actions angeben, die jeweils für das andere Array die Funktion aufrufen oder so.

Beitrag wurde zuletzt am 13.02.12 um 21:54:13 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
4 Zahlenreihen -- alle möglichen Kombinationen ermitteln4.791Schudi13.02.12 19:53
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln3.547Manfred X13.02.12 20:22
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln3.421Schudi13.02.12 20:32
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln3.963Manfred X13.02.12 21:25
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.503Sloorg09.07.16 13:22
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.716Manfred X09.07.16 21:29
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln3.744Preisser13.02.12 21:38
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.566Sloorg09.07.16 23:08
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.602Manfred X10.07.16 10:33
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.693Franki21.07.16 04:23
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.646Sloorg11.07.16 03:56
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.524Sloorg20.07.16 07:41
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.503Franki21.07.16 04:27
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.519Sloorg21.07.16 10:21
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.477Sloorg21.07.16 11:10
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.485Franki22.07.16 03:15
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.485Sloorg22.08.16 10:05
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.440Manfred X21.07.16 11:12
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.478Franki22.07.16 02:36
Unterscheidbare Permutationen2.502Manfred X22.07.16 04:49
Re: Unterscheidbare Permutationen2.496Franki24.07.16 01:33
Re: Unterscheidbare Permutationen2.404Sloorg24.07.16 19:35
Re: Unterscheidbare Permutationen2.492Manfred X24.07.16 21:05
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.547Sloorg25.07.16 09:31
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.591Sloorg25.07.16 09:40
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.450Manfred X25.07.16 16:01
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.491Franki27.07.16 01:27
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.455Manfred X28.07.16 12:07
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.583kocengmalek28.07.16 09:14
Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln2.608kocengmalek28.07.16 10:14

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel