Ergebnis 1 bis 6 von 6

Thema: Ruby (RMXP) > Verschiedene, einzigartige, Kombinationen mehrerer Arrays ermitteln

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #3
    Ich würde mir um die Laufzeit nicht besonders viele Gedanken machen. Ich nehme mal an, dass die Anzahl der Arrays und die Anzahl der Elemente höchstens im zweistelligen Bereich liegt, da ist es eigentlich noch recht irrelevant, ob man quadratische oder lineare Laufzeit hat.
    Man könnte sich natürlich viele Gedanken machen und das Ganze sehr viel effizienter lösen, Frage ist halt ob es den Aufwand dafür rechtfertigt.

    Für Ideen kann man immer die Array-Dokumentation durchforsten, ob eine Methode etwas in die richtige Richtung macht.
    product sieht mir spontan schon recht ähnlich aus zu dem, was du machen willst.
    Ich hab jetzt nicht überprüft, ob es die Methoden auch in der Ruby-Version vom RmXP gibt, aber so könnte man es mit recht wenig Code machen.

    Product liefert alle mögliche Kombinationen ohne Überprüfung, ob ein Element mehrfach vorkommt.
    Da product auf einem array aufgerufen wird (in diesem Fall auf einem Teilarray des Gesamtarrays) und als Parameter die weiteren Arrays bekommt, sieht der Aufruf vielleicht etwas komisch aus. a.product() ohne Parameter würde nicht das richtige machen.
    Außerdem gehört das * noch vor den Parameter, da man die Arrays als Parameterliste und nicht als zusammengehörigeres Array benötigt. Ich hoffe das wird hier nicht zu kompliziert zu verstehen...
    uniq entfernt alle doppelten Elemente aus dem Array, wenn es keine gibt, bleibt das Array gleich und die Kombination ist gültig.
    Das Ganze verketten und man hat eine Lösung mit zumindest recht übersichtlichem Code.
    Code:
    def get_all_combinations(a)
      a.first.product(*a[1..a.length-1]).select{|b| b.uniq==b}
    end
    Ansonsten könnte man auch einfach über alle Arrays iterieren und so die Kombinationen finden.

    Edit:
    Code korrigiert, da man product eine Parameterliste von Arrays und nicht ein Array von Arrays übergeben muss

    Geändert von Fatalis (24.10.2012 um 13:40 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •