tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
585
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    _nicer_ _nicer_ ist offline Grünschnabel
    Registriert seit
    Oct 2009
    Beiträge
    1
    Hallo Zusammen,

    ich stehe gerade etwas extrem auf dem Schlauch. Ich habe das Alphabet (26 Buchstaben) und möchte alle Möglichkeiten ausschöpfen die Buchstaben in 8 Felder zu verteilen. Dabei soll die Reihenfolge im Alphabet allerding erhalten bleiben.

    Also das ist so gemeint. Ich mach mal ein Bsp nur mit A,B und C und 3 möglichen "Feldern":

    _ = Feld ist leer.

    Möglichkeit 1:
    ABC | _ | _
    AB | C | _
    A | BC | _
    A | B | C

    Vielleicht hat ja jemand schonmal sowas gemacht und kann mir den Code zur Verfügung stellen. Oder mir einen Lösungsansatz liefern, wie ich da ran gehn kann.

    Danke Gruß Pascal
     

  2. #2
    kabel2 kabel2 ist offline Mitglied Gold
    Registriert seit
    Aug 2005
    Beiträge
    138
    Das schreit förmlich nach einer Rekursion wie bei den Hanoischen Türmen.
    Die rekursive Funktion hat bei mir drei Parameter: Den Zeichenvorrat als Liste, eine Liste mit den einzelnen Zeichenketten, und die Position, ab der Zeichen aus dem Zeichenvorrat eingefügt werden sollen.

    Interessanter dürfte allerdings die Funktion abhängig von der Anzahl Zeichen im Vorrat und den zu besetzenden Stellen sein, die direkt die Anzahl liefert.
    Hat da jemand eine offene oder geschlossene? Bin ordentlich aus der Übung... Gebe auch zu, dass ich nach ner halben Stunde abgebrochen habe
     

  3. #3
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.885
    Blog-Einträge
    29
    Hallo,

    gib doch bitte mal noch ein weiteres Beispiel an:
    4 Buchstaben auf 3 Felder.

    Wenn ich dich richtig verstanden habe, lässt sich dein Problem auch folgendermaßen darstellen:

    Aus:
    ABC | _ | _
    AB | C | _
    A | BC | _
    A | B | C
    wird:
    Code :
    1
    2
    3
    4
    
            3 0 0
            2 1 0
            1 2 0
            1 1 1

    Die Zahlen geben die jeweiligen Feldkapazitäten an. In jeder Zeile ist die Kapazität k gleich (in diesem Fall also 3).

    Wenn du nun im ersten Schritt diese Kapazitätspläne generieren würdest,
    könntest du in einem zweiten Schritt mit einem kleinen "Fenster" (sliding window) der Länge k über das Alphabet laufen und die darin enthaltenen Buchstaben je nach Kapazitäten auf die Felder verteilen.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  4. #4
    kabel2 kabel2 ist offline Mitglied Gold
    Registriert seit
    Aug 2005
    Beiträge
    138
    Der Lösungsansatz ist gut.
    Ich nehme allerdings an, dass vorne auch Leerstellen sein dürfen, so dass _ AB C z.B. auch eine gültige Lösung darstellen.
    Es reicht übrigens aus, alle Feldkapazitäten herzuleiten, denn zwischen der Feldkapazität und den Zeichen, die dann darin liegen, besteht eine 1:1 Beziehung. (Mathesprech: Isomorphie).
    Dazu einfach von links nach rechts einen Kapazitätsplan durchgehen und die (geordneten) Zeichen dann reinschieben. Das geht auf genau einem Weg.

    Für die Funktion ergibt sich dann folgendes:
    (mit n Anzahl der Stellen, auf die verteilt werden kann und k Anzahl der Zeichen im Vorrat)
    1) Zuerst kann man sich entscheiden, auf wieviele Stellen man die k Zeichen legen kann. Das rangiert von i=1 bis n.
    2) Diese i Stellen können nun irgendwie auf den n möglichen Stellen liegen. Das ist dann ein Faktor innerhalb der Funktion.
    3) Die k Zeichen können nun auf den i Stellen verteilt werden. Einzige Einschränkung ist, dass die Summe auf den Stellen jeweils k ergibt.

    So und das Ganze jetzt bitte schön in Mathesprech einpacken
    Dürfte für die Fein-Kombinatoriker ein Klacks sein, ich hab das damals gehasst wie die Pest.
     

  5. #5
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Du solltest am besten nicht in Feldern und Zeichen denken, sondern in Alphabet und Separatoren (Feldtrennern).

    Beispiel:
    Du hast ein Alphabet 'ABCDEFGHI'
    und mußt 4 Felder füllen, was gleichbedeutend ist mit der Aufgabe, innerhalb des Alphabets 3 Feldtrenner zu platzieren. Da du 9 Buchstaben hast, hast du 8 mögliche Positionen zwischen den Buchstaben, eine vor allen Buchstaben und eine hinter allen Buchstaben, also insgesamt 10; diese kannst du von 0 bis 9 durchnummerieren.
    Nun brauchst du nur noch durchzuzählen:

    0 0 0
    0 0 1
    0 0 2
    ...
    0 0 9
    0 1 1 (nur wenn auch zwischendrin leere Felder erlaubt sind!)
    0 1 2
    0 1 3
    etc.

    du musst nur darauf achten, dass eine Positionsnummer nicht kleiner sein darf als eine vorhergehende.

    Viel Erfolg
    Geändert von Vereth (13.11.09 um 16:41 Uhr)
     

Ähnliche Themen

  1. Hilfe bei einem Algorithmus
    Von zunamy im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 18
    Letzter Beitrag: 03.06.10, 13:11
  2. Ähnlich einfärben
    Von Dark_Fighter im Forum Photoshop
    Antworten: 6
    Letzter Beitrag: 20.08.04, 17:34
  3. Dropdwonmenüs...oda so ähnlich
    Von Tear im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 18.03.04, 17:35
  4. if ( ähnlich)
    Von melmager im Forum PHP
    Antworten: 12
    Letzter Beitrag: 21.08.02, 18:50
  5. wie ähnlich....?
    Von ttrenz im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 14.07.01, 22:49