Thema Datum  Von Nutzer Rating
Antwort
Rot Permutation eines Vektors ohne Wiederholungen (Programmoptimierung)
20.08.2018 21:33:20 Daniel
NotSolved
21.08.2018 03:06:38 Gast82999
NotSolved
21.08.2018 07:22:37 Daniel
NotSolved

Ansicht des Beitrags:
Von:
Daniel
Datum:
20.08.2018 21:33:20
Views:
798
Rating: Antwort:
  Ja
Thema:
Permutation eines Vektors ohne Wiederholungen (Programmoptimierung)

Guten Abend zusammen,

ich habe bereits vor über einem Monat versucht eine Antwort bzgl. meiner Frage zu bekommen, war leider jedoch erfolglos. Nun versuche ich es erneut und freue mich auf eure Ideen :)

Grob gesagt geht es um einen Vektor, wessen Einträge in ihrer Reihenfolge so verändert werden, dass ich alle Anordnungsmöglichkeiten erhalte. Dies macht mein unten aufgeführter Code bereits, jedoch generiert er auch "doppelte" Möglichkeiten, da gleiche Ziffern miteinander vertauscht werden, was für mich keinen neuen Fall darstellt.

Stand:

1. Ein Vektor mit einer variablen Länge (in meinem Code Arr genannt)

2. Eine gewisse Anzahl an Stellen dieses Vektors, welcher mit 1en oder 2en gefüllt werden darf (in meinem Code A_NmaxVal genannt)

3. Mein Code generiert alle Anordnungsmöglichkeiten dieses Vektors (Vertauschen der Zeichenreihenfolge)

Problem:

Der Permutationscode (Function permutation) generiert auch doppelte Möglichkeiten (vertauscht z. B. eine 0 mit einer 0 im Vektor)

-> Je nach Fall (Größe von Arr oder A_NmaxVal) dauert es sehr lange bis alle Möglichkeiten gefunden werden

Anschließend lösche ich alle doppelten Möglichkeiten (dieser Programmcode wird in meinem unten gezeigten Codeschnipsel nicht ausgeführt).

Ziel:

Generierung von allen unterschiedlichen Möglichkeiten ohne doppelte Möglichkeiten zu berechnen um Rechenzeit zu sparen

 

Sub s_Array_erstellen()
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    'Die Laenge dieses Arrays ist variabel!
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Arr = Array(1, 2, 3, 4, 5)
    s_Faelle_erstellen (Arr)
End Sub

Sub s_Faelle_erstellen(b)
     
    'Zahlen (diese sind natuerlich nur fiktiv, in Realitaet sind es Verweise auf bestimmte Namen
    strVal1 = "=1"
    strVal2 = "=2"
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    'Beliebig waehlbare max. Anzahl an befuellten Eintraegen in Matrix
    '(muss natuerlich kleiner als die Anzahl der Arrayeintraege sein)
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    A_NmaxVal = 3
     
    'Array überschreiben
    a = b
    'Array auf Null setzen
    For i = 0 To UBound(a)
        a(i) = 0
    Next
    'Matrizen erzeugen für alle Fälle
    For j = 0 To A_NmaxVal - 1
        'Für alle bisher vorhandenen Werte in der Matrix
        For l = 0 To j
            'Wert in Matrix ersetzen
            a(l) = strVal1
            'Permutation durchführen
            Call permutation(a, 0)
        Next
        For m = 0 To j
            'Wert in Matrix ersetzen
            a(m) = strVal2
            'Permutation durchführen
            Call permutation(a, 0)
        Next
        '_______________________________________
        'Finden und Löschen von doppelten Werten
'        s_Werte_zusammenfassen (a)
'        Call s_DoppelteZeilenLöschen(a)
'        Call s_LetzteSpalteLoeschen
        '_______________________________________
    Next
     
End Sub
 
Function permutation(ByVal a, k)
    If k = UBound(a) Then
        Zeile = Cells(65536, 1).End(xlUp).Row
        If Cells(1, 1) <> "" Then Zeile = Zeile + 1
        ActiveSheet.Range(Cells(Zeile, 1), Cells(Zeile, UBound(a) + 1)).FormulaArray = a
        Exit Function
    Else
        For i = k To UBound(a)
            x = a(i)
            a(i) = a(k)
            a(k) = x
            Call permutation(a, k + 1)
        Next
    End If
End Function

Vielen Dank bereits im Voraus.

LG Daniel


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Permutation eines Vektors ohne Wiederholungen (Programmoptimierung)
20.08.2018 21:33:20 Daniel
NotSolved
21.08.2018 03:06:38 Gast82999
NotSolved
21.08.2018 07:22:37 Daniel
NotSolved