Permutation of Array



  • SeppJ schrieb:

    Fällt euch jetzt eine triviale Umsetzung ein, die wirklich ein 0 verdient?

    Mir nicht.
    Ich wüsste nicht wie man den von Arcoth bzw. auch trivialo implementierten Algorithmus noch weiter vereinfachen könnte.
    Will sehen! 🙂


  • Mod

    hustbaer schrieb:

    Ich wüsste nicht wie man den von Arcoth bzw. auch trivialo implementierten Algorithmus noch weiter vereinfachen könnte.
    Will sehen! 🙂

    Ich meine den von trivialo bzw. den zweiten von Arcoth. Das ist in meinen Augen wesentlich einfacher als die Nummer 1 von Arcoth und verdient eine 1 oder weniger.



  • Also ich hab nen Bachelor in Informatik und ich bin zu blöd den Algorithmus hinzukriegen. Also einfach ist das sicher nicht.



  • @SeppJ
    Ich dachte dass du was anderes meinst, da dieser Algorithmus ja bereits 2x gepostet wurde bevor du gefragt hast ob uns was einfaches einfällt.

    Dass Arcoth den für "schwerer als 1" hält hat er ja schon geschreiben.

    Ich würde ihm ne 1 geben. Ne 0 finde ich übertrieben.


  • Mod

    hustbaer schrieb:

    @SeppJ
    Ich dachte dass du was anderes meinst, da dieser Algorithmus ja bereits 2x gepostet wurde bevor du gefragt hast ob uns was einfaches einfällt.

    trivialo hat geantwortet, während ich meine Antwort formuliert habe und Arcoths iter_swap-Code habe ich nicht wirklich gelesen. Zu anstrengend.

    Wenn man will, kann man die gleiche Idee auch noch einfacher formulieren, wobei es aber für den Computer aufwändiger wird:

    template<typename Vector> void print_combinations(Vector data, Vector history)
    {
      if (data.empty())
        {
          for (const auto& e: history)
            std::cout << e << '\t';
          std::cout << '\n';
        }
      else
        {
          for (std::size_t i = 0; i < data.size(); ++i)
            {
              auto new_data = data;
              auto new_history = history;
              new_data.erase(new_data.begin() + i);
              new_history.push_back(data[i]);
              print_combinations(new_data, new_history);
            }
        }
    }
    


  • Hallo,

    ich hab jetzt mal den Algo gefunden . Ist der gut ? Leider versteh ich den überhaupt nicht. Allgemein hab ich große Probleme mit Rekursion. Sollte man sich das am besten mathematisch herleiten ?

    void permute(int k,int size){
        int i;
    
        if (k==0)
            printArray(size);
        else{
            for (i=k-1;i>=0;i--){
                swap(i,k-1);
                permute(k-1,size);
                swap(i,k-1);
            }
        }
    
        return;
    }
    

  • Mod

    NullPlanProf schrieb:

    ich hab jetzt mal den Algo gefunden .

    Also abgeschrieben? Und noch dazu exakt den gleichen, der jetzt schon 2.5 Mal in diesem Thread genannt wurde? Ich habe ja die Ausrede, nicht alle Antworten zu lesen, weil es nicht mein Thread ist. Du nicht. Schön zu wissen, dass hier anscheinend sämtliche Antworten für die Katz' sind.

    Ist der gut ?

    Kommt drauf an, was wirklich gefragt ist.

    Leider versteh ich den überhaupt nicht.

    Tja.

    Allgemein hab ich große Probleme mit Rekursion.

    Tja.

    Sollte man sich das am besten mathematisch herleiten ?

    Nein, nicht in dem Sinne, wie man Rekursion in der Mathematik behandelt.

    8/10 auf der Blurryskala.


Anmelden zum Antworten