Ankündigung

Einklappen
Keine Ankündigung bisher.

ARRAY: alle möglichen Kombinationen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ARRAY: alle möglichen Kombinationen

    Hi Leute,

    falls der Thread hier eher ins Anfängerforum gehört, verschiebt ihn, aber ich mach mir seit ner Stunde Gedanken um folgendes Problem und ich würd mich eher nicht als "Anfänger" bezeichnen. Vielleicht hab ich auch nur nen Blackout. Jedenfalls hier mein Problem und ich hoffe, ihr könnt mir weiterhelfen:

    - Ich habe ein Array mit einer variablen Anzahl an Einträgen (zwischen 0 und ca. 10).
    - Ich brauche daraus ein mehrdimensionales Array, das mir alle möglichen Kombinationen dieser Array-Elemente auflistet

    Als Beispiel:

    gegebenes Array:
    Code:
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    gefordetetes Array:

    Code:
    Array
    (
        [0] => Array
            (
            )
    
        [1] => Array
            (
                [0] => 1
            )
    
        [2] => Array
            (
                [0] => 2
            )
    
        [3] => Array
            (
                [0] => 3
            )
    
        [4] => Array
            (
                [0] => 1
                [1] => 2
            )
    
        [5] => Array
            (
                [0] => 1
                [1] => 3
            )
    
        [6] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        [7] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Weiß jemand Rat?

  • #2
    Naja das geht schon mit mehreren Schleifen und so. Musst halt nen Array erstellen mit allen und mit keinem Inhalt. Und dann hier nen Bsp: k=5 (Anzahl der Inhalte also 1-5)

    Erst für k=1, da gibts die Lösungen 1,2,3,4,5
    dann für k=2 dann musste ne Schleife undzwar:
    erstes Element 1: durchgehen für alle anderen also 2,3,4,5 und kombinieren ...
    zweites Element: durchgehen für alle außer dem ersten element 3,4,5
    etc ...
    dann k=3 bis eben k=anzahl-1=4 ...

    Ist zwar umständlich aber so gehts

    Kommentar


    • #3
      Ein ähnliches Problem wurde hier behandelt:
      http://forum.developers-guide.net/showthread.php?t=3503

      Muss man natürlich umschreiben, da es nicht um die Summen geht und man alle Konstellationen haben will und nicht nur die, die eine gewisse Bedingung erfüllen, aber das sollte ein Fortgeschrittener eigentlich hinbekommen

      Wobei die rekursive Variante ohne Schleifen eleganter ist...

      PS: Der Fachbegriff für das Gesuchte lautet Potenzmenge
      http://de.wikipedia.org/wiki/Potenzmenge
      mod = master of disaster

      Kommentar


      • #4
        habe hier noch nen Script, das deine Wünsche erfüllen sollte:

        PHP-Code:
        function potenzmenge($array){
            
        $results = array(array());
            
            foreach (
        $array as $element)
                foreach (
        $results as $combination)
                    
        array_push($results,array_merge(array($element),$combination));
            return 
        $results;

        Kommentar


        • #5
          ich finde ein Fortgeschrittener darf ruhig auch selbst eigene Überlegungen anstellen und präsentieren, eine Frage in den Raum stellen ist einfach zu wenig...

          Deshalb, Thread verschoben:
          Fortgeschrittene Anfänger

          (das übernehme ich auch gleich mal in die Boardregeln)

          Kommentar


          • #6
            naja, er hat gesagt, dass er daran schon seit einiger zeit arbeitet
            Nicht jeder Fehler ist ein Bug.

            Kommentar


            • #7
              behaupten alle, irgendwas muss ja bei rumgekommen sein und das kann man ja mal zeigen

              aber ist ja auch egal

              Letztlich ist das ganze mit Rekursion wahrscheinlich sogar mit relativ wenig Code zu lösen. Mal überlegen. Bis gleich

              Kommentar


              • #8
                Denke, Iteration reicht, is auch perfomanter...
                PHP-Code:
                $in = array(1,2,3);
                $out = array(array());
                foreach (
                $in as $val1) {
                    
                $temp $out;
                  foreach (
                $out as $key2 => $val2) {
                    
                $out[$key2][] = $val1;
                  }
                  
                $out array_merge($temp,$out);

                beinhaltet allerdings auch nen leeres Array, was aber so weit meine Erinnerung des letzten Semester noch aufkeimen, durchaus auch zur Potenzmenge gehört. Ansonsten kann man die sicher auch catchen
                Nicht jeder Fehler ist ein Bug.

                Kommentar


                • #9
                  PHP-Code:
                  $in = array(1,2,3);
                  $out = array(array());
                  foreach (
                  $in as $val1) {
                      
                  $temp $out;
                    foreach (
                  $temp as $val2) {
                      
                  $out[] = array_merge($val2,array($val1));
                    }

                  Noch ne schönere variante
                  Nicht jeder Fehler ist ein Bug.

                  Kommentar


                  • #10
                    PHP-Code:
                    START

                    <?php
                    error_reporting
                    (E_ALL);
                    $total = array();
                    $c 0;
                    function 
                    JederMitJedem($list$depth 0)
                    {
                        global 
                    $total$c;
                        
                        if (
                    $c++ > 100)
                            return;
                        
                        
                    $total[] = array($list);
                        foreach (
                    $list as $key => $value) {
                            
                    $newlist $list;
                            unset(
                    $newlist[$key]);
                            
                    JederMitJedem($newlist, ++$depth);
                        }
                    }
                    $list = array(1,2,3,4);
                    JederMitJedem($list);
                    print 
                    "<hr />";
                    echo 
                    '<pre>'print_r($totaltrue), '</pre>';
                    ?>
                    ENDE
                    Nicht schön (aber so darf das beim Entwickeln ruhig mal sein) und der
                    komische Ergebnis-Array wundert mich auch (warum hat der eine
                    überflüßige Dimension), deshalb geht array_unique() nicht...Ich kümmer
                    mich morgen nochmal drum.

                    Bin aber auch bissl neben der Kapp grad, bis ich gemerkt hab, dass ich
                    keine for-Schleife benutzen darf :Z

                    Kommentar


                    • #11
                      Deine ist wirklich schöner und besser

                      Kommentar


                      • #12
                        Und kürzer
                        Danke
                        Nicht jeder Fehler ist ein Bug.

                        Kommentar


                        • #13
                          hab ja noch viel Debug-Mist drinne

                          Wofür wird das ganze jetzt eigentlich gebraucht?

                          Kommentar


                          • #14
                            Sieht sehr nach einer Potenzmenge aus. Kann man zB für Wahrscheinlichkeitrechnungen gebrauchen (Wahrscheinlichkeiten der Ereignisse 1,2,3, wie groß sind die Wahrscheinlichkeiten beliebiger Kombinationen?)
                            Nicht jeder Fehler ist ein Bug.

                            Kommentar

                            Lädt...
                            X