Algorithmus für zufällige Anordnung gesucht
-
Hallo!
Ich habe n Objekte:
Jedes dieser Objekte beinhaltet zwei Methoden:
+getAnzahlAufrufe() : int
+doOperation() : voidgetAnzahlAufrufe() liefert eine Zahl, die angibt, wie oft doOperation() des jeweiligen Objektes aufgerufen werden muss. Diese Zahl liegt zwischen 2 und n>>2.
Gesucht ist jetzt eine zufällige Anordnung der Aufrufe von doOperation aller Objekte.
Zum Beispiel habe ich 3 Objekte. Bei Objekt 1 muss doOperation() 3 Mal, bei Objekt 2 2 Mal und bei Objekt 3 4 Mal aufgerufen werden. Dann wäre eine mögliche Anordnung:
[1,1,2,3,3,3,2,1,3], wobei 1 für Objekt 1, 2 für Objekt 2 und 3 für Objekt 3 steht.
Nun suche ich eben einen Algorithmus, der mir für n Objekte eine solche Anordnung ausgibt.
Mir fallen da zwar ein Paar Dinge ein, wie ich das realisieren könnte, es ist nur alles nicht so schön.
Hätte da jemand eine Idee?
-
Doh!
Jedes Mal wenn ich hier eine Frage stelle, fällt mir sofort selbst eine Antwort ein...
Hat sich erledigt also.
-
gruml gruml gruml schrieb:
Doh!
Jedes Mal wenn ich hier eine Frage stelle, fällt mir sofort selbst eine Antwort ein...
Hat sich erledigt also.Poste die Lösung doch auch noch. Falls sie sich in wenigen Worten bescheiben läßt, natürlich. Dann würde die "Wissensdatenbank" weiter wachsen.
-
ich würde spontan sagen:
Die nummer jedes Objektes in einen vector einfügen und zwar exakt getAnzahlAufrufe() mal. Danach std::random_shuffle (bzw das Äquivalent in der Sprache, in der du dich befidnest). Dann hast du deine Sequenz und musst den vector nur einmal von vorne nach hinten durchlaufen.
Also in c++:
//deine Objekte std::vector<Object> objects; //erstellen der Sequenz std::vector<unsigned int> sequence; for(std::size_t i = 0; i != objects.size(); ++i){ std::size_t insertions = objects[i].getAnzahlAufrufe(); for(std::size_t j = 0; j != insertions; ++j){ sequence.push_back(i); } } //mischen std::random_shuffle(sequence.begin(),sequence.end()); //ausführen for(std::size_t i = 0; i != sequence.size();++i){ objects[sequence[i]].doOperation(); }
Frohe Weihnachten :xmas1:
-
@otze:
Ich würde spontan sagen volkard weiss ganz gut wie man sowas anstellt, wollte aber dass der OP es selbst beschreibt.
-
... bloß stellen wollte er ihn. :xmas1:
-
hustbaer schrieb:
@otze:
Ich würde spontan sagen volkard weiss ganz gut wie man sowas anstellt, wollte aber dass der OP es selbst beschreibt.das volkard das weiß, weiß ich. trotzdem nur der Vollständigkeit halber.
Wegen: "Dann würde die "Wissensdatenbank" weiter wachsen."
Frohe Weihnachten dir auch :xmas1: