Kombinationen ohne Wiederholung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ThePlexian.

    Kombinationen ohne Wiederholung

    Hallo zusammen!

    Ich hänge derzeit bei einem Problem welches mir das Leben schwer macht.
    Wobei es in dieser Problemstellung geht:

    Ich habe drei Felder mit jeweils 3 Werten (welche variieren) und möchte alle Kombinationen ausgeben lassen.

    Schaut circa wie folgt aus:

    Feld 1: 1-25
    Feld 2: 5-20
    Feld 3: 10-40

    (Dasselbe auch mit 4 bzw. 5 Feldern. 3 reichen vorerst um einmal das Prinzip zu verstehen)

    Ich bitte nur um einen kleinen Push in welche Richtung ich denken soll, bitte keine fertigen Code-Snippets oder what so ever, hilft mir gar nicht weiter...
    Habe bereits die "Doktor-Arbeit" von ErfinderDesRades gelesen und die SUFU benutzt, bin jedoch um nichts schlauer geworden.

    Mfg

    TehBasic
    Probiers mal mit dem Domino-Algorithmus, der verursacht auch keine wiederholungen (3-4 und 4-3 sind "wiederholungen")
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @ThePlexian
    Nein, ich schreibe die Kombinationen separat in eine XML Datei.

    Wie bereits oben erwähnt:
    Feld 1: 1-25
    Feld 2: 5-20
    Feld 3: 10-40

    in der XML sieht es dann circa so aus:

    XML-Quellcode

    1. <stats>
    2. <add order="blabla" stat="Feld1" val="1" />
    3. <add order="blabla" stat="Feld2" val="5" />
    4. <add order="blabla" stat="Feld3" val="10" />
    5. </stats>
    6. <stats>
    7. <add order="blabla" stat="Feld1" val="2" />
    8. <add order="blabla" stat="Feld2" val="5" />
    9. <add order="blabla" stat="Feld3" val="10" />
    10. </stats>


    etc....

    Nun will ich für jede kombination ein <stats> Tag.
    XML hin oder her, mir geht es hier eigentlich um die Möglichen Kombinationen....


    @VB1963
    Werde ich mir gleich mal ansehen, danke.

    @Radinator
    Schau ich mir auch gleich an, danke

    TehBasic schrieb:

    Habe bereits die "Doktor-Arbeit" von ErfinderDesRades gelesen und die SUFU benutzt, bin jedoch um nichts schlauer geworden.
    Selber schuld :P
    Wenn du dich wirklich dahinter klemmst, kannst du grad daran umso schlauer werden.
    Du musst es aber ernsthaft versuchen.
    Also die Algos selbst musst du nichtmal verstehen, sondern einfach ernsthaft versuchen, den (hier zutreffenden) Combinatoric-Algo in dein Projekt zu kopieren und sinnvoll aufzurufen.
    Dabei entstehen Problem, die man eins nach dem anderen klären kann.
    Am Ende hast du eine Riesen-Menge an Programmier-KnowHow gelernt, und dass dein Prob gelöst ist, ist im Grunde nur noch eine Nebensache.
    Trenne Deine Probleme und löse sie einzeln: Kombination und XML.
    Poste, was bei einer Eingangsmenge von "1", "2", "3" als Output rauskommen soll, nicht

    TehBasic schrieb:

    circa
    sondern bitte als vollständige Aufzählung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin daweil hinter das Geheimnis des Algo gekommen, wöfür ich jedoch noch eine Lösung finden muss ist wie ich die Kombinationen von 3 separaten Zahlen bekomme (weil diese alle seperat ausgegeben werden).

    @RodFromGermany
    Ich löse sie ja einzeln, der XML output war nur dazu da um die Problemstellung zu veranschaulichen.
    Bild im Anhang

    Die Kombination von 2 Werten habe ich bereits zusammengebastelt. Was mich nun interessiert ist wie ich die Kombination von 3 oder mehreren Zahlen auf die Reihe bekomme:

    Spoiler anzeigen

    Input:
    Feld1: 1-3
    Feld2: 1-3
    Feld3: 1-3

    Output:
    1-1-1
    1-1-2
    1-2-1
    1-2-2
    2-1-1
    2-2-1
    2-1-2
    2-2-2
    3-1-1
    3-1-2
    3-2-1
    3-2-2
    3-3-1
    3-3-2
    3-3-3


    Dasselbe möchte ich gerne mit 3, 4 und 5 werten machen. Jede mögliche Kombination zwischen Min Val und Max Val ohne Wiederholung.


    Mfg
    TehBasic
    Bilder
    • form.jpg

      70,47 kB, 527×454, 211 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TehBasic“ ()

    TehBasic schrieb:

    welche so aussieht
    Kannst Du das mal ohne XML-Overhead darstellen?

    RodFromGermany schrieb:

    Poste, was bei einer Eingangsmenge von "1", "2", "3" als Output rauskommen soll

    Kannst Du für Bilder bitte die Dateianhangs-Funktionalität des Forums nutzen?
    ==> Erweiterte Antwort -> Dateianhänge -> Hochladen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das soll wohl die Ausgabe dessen sein, was ich "Brute-Force" nenne (mathematisch definiert als "Permutationen mit Wiederholungen"), aber deine Auflistung ist unvollständig.
    siehe die Ausgabe, notiert in post#1 von Permutationen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    TehBasic schrieb:

    1-1-1
    ist bei mir allerdings "Mit Wiederholung", nicht aber
    ohne Wiederholung
    :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Meine Idee wäre folgende:
    1. Vorliegen hast du die Zahlenbereiche in einem IEnumerable<int>.
    2. Du merkst dir, wie lang die längste Liste ist => n
    3. du holst dir alle Combs des Arrays {1, 2, ... , n}
    4. Dann ersetzt du einfach bei jedem Comb den Index durch das Listenelement. Einige Combs können halt nicht umgesetzt werden, weil die Indizes ja nicht immer passen können, die lässt du dann aus.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais