Zahlenfelder durchmischen



  • Nexus schrieb:

    zwutz schrieb:

    du kannst std::sort deine eigene Sortiermethode / -klasse mitgeben.

    Er will aber das Gegenteil machen 🙂

    Was diese Sortiermethode macht, bleibt ja ihm ueberlassen. Hauptsache, sie gibt true zurueck, wenn der erste der erste der beiden Parameter derjenige ist, der vorne stehen muss (in der Regel also kleiner ist)



  • zwutz schrieb:

    Was diese Sortiermethode macht, bleibt ja ihm ueberlassen. Hauptsache, sie gibt true zurueck, wenn der erste der erste der beiden Parameter derjenige ist, der vorne stehen muss (in der Regel also kleiner ist)

    Ja, aber damit kann man trotzdem nur eine Sequenz bilden, bei der für jeweils zwei benachbarte Elemente das Vergleichskriterium zutrifft. Permutationen kommen also nicht in Frage...



  • bis jetzt hat er noch nicht gesagt, wie er "sortieren" will...



  • Naja, die folgenden Aussagen haben mich das vermuten lassen:

    Roque schrieb:

    Ich bin auf der Suche nach einem Algorithmus, der genau das Gegenteil macht, also beispielsweise ein int-array nach einem bestimmten Schema durchmischt...

    Roque schrieb:

    Im Endeffekt suche ich einen Sortier-Algorithmus. Allerdings nicht nach dem Kriterium "aufsteigend/absteigend" sondern nach einem anderen... das mit den Permutationen sieht interessant aus.

    Und das ist schliesslich nicht mit einem Funktor als Übergabe an die Sortierfunktion zu lösen 😉


  • Administrator

    Nexus schrieb:

    Naja, die folgenden Aussagen haben mich das vermuten lassen:

    Roque schrieb:

    Ich bin auf der Suche nach einem Algorithmus, der genau das Gegenteil macht, also beispielsweise ein int-array nach einem bestimmten Schema durchmischt...

    Roque schrieb:

    Im Endeffekt suche ich einen Sortier-Algorithmus. Allerdings nicht nach dem Kriterium "aufsteigend/absteigend" sondern nach einem anderen... das mit den Permutationen sieht interessant aus.

    Und das ist schliesslich nicht mit einem Funktor als Übergabe an die Sortierfunktion zu lösen 😉

    Wieso? Sicher geht das!

    class RandomSort
    {
    public:
      template<typename FirstT, typename LastT>
      bool operator ()(FirstT const&, LastT const&)
      { return static_cast<bool>(rand() & 1); }
    };
    
    // Irgendwo:
    std::sort(container.begin(), container.end(), RandomSort());
    

    Grüssli 🙂



  • lass mich doch auch mal was hilfreiches sagen 😞

    vll will er ja zuerst alle ungeraden und dann alle geraden in seiner Liste haben, vll will er die Zahlen nach der Anzahl der gesetzten Bits sortieren oder nach ihrem Abstand zur naechsten Primzahl oder nach der Anzahl der Primfaktoren... alles Faelle, wo ausnahmsweise ich mal recht haette 😉



  • Naja, es ist sicher das Beste, wenn wir einfach darauf warten, dass er sich genauer ausdrückt 🙂


  • Administrator

    zwutz schrieb:

    vll will er ja zuerst alle ungeraden und dann alle geraden in seiner Liste haben, vll will er die Zahlen nach der Anzahl der gesetzten Bits sortieren oder nach ihrem Abstand zur naechsten Primzahl oder nach der Anzahl der Primfaktoren... alles Faelle, wo ausnahmsweise ich mal recht haette 😉

    Das wären aber alles Fälle, welche auf- oder absteigend sind. Und das will er ja nicht 🙂
    Deshalb bin ich auch davon ausgegangen, dass er etwas zufälliges will, was er aber auch nicht will, oder doch? 😕
    Ich habe KEINE AHNUNG was er will 🙂

    Grüssli



  • Heieiei... an dieser Stelle erst Mal vielen Dank für das klasse Feedback 🙂

    In erster Linie suche ich ein mathematisches Verfahren, mit dem man geordnete Zahlenfelder systematisch durchmischen kann - beispielsweise in Abhängigkeit einer int-Variable. Hintergrund ist folgender: Ein Modul meines Verschlüsselungs-Algorithmus liest den eingegebenen Text buchstabenweise in eine Matrix (d.h. jede Zelle ein Buchstabe). Neben der Matrix existiert ein Array, welches genau so viele Einträge besitzt wie Zellen der Matrix.

    Dem geordneten Array wird also jedem Eintrag eine Position in der Matrix zugeordnet. Wenn ich jetzt systematisch das Array durchmische ändert sich die Position eines jeden Buchstabens in der Matrix - das soll eben ein Teil der Verschlüsselung werden. Fein wäre es eben, wenn diese "Verteilung" möglichst homogen wäre - also quasi "zufällig" verteilt wird.

    Kann sein dass es auch eine viel elegantere Lösung dazu gibt... über Tipps wäre ich Euch sehr dankbar 🙂

    Grüße
    Johannes


  • Administrator

    Also doch ein Randomschuffle, nur möchtest du einen etwas besseren Zufallgenerator, bzw. mehr Kontrolle darüber? Dann schau mal in die Boost Libraries, da findet man eine Lib mit dem wunderschönen Namen Random.

    Grüssli



  • ich war doch wieder falsch 😞



  • Dravere schrieb:

    Also doch ein Randomschuffle, nur möchtest du einen etwas besseren Zufallgenerator, bzw. mehr Kontrolle darüber? Dann schau mal in die Boost Libraries, da findet man eine Lib mit dem wunderschönen Namen Random.

    Ich weiss nicht, ob es mit einem Zufallsgenerator möglich ist, alle möglichen Permutationen nacheinander durchzugehen und jede einzelne Permutation eindeutig per Integer ansprechen zu können...

    Wahrscheinlich kommt man da nicht drum herum, tiefer in die Materie einzusteigen und sich mathematisch damit auseinanderzusetzen. Würde mich übrigens auch noch interessieren, wie das möglich wäre 😉


  • Administrator

    Nexus schrieb:

    Ich weiss nicht, ob es mit einem Zufallsgenerator möglich ist, alle möglichen Permutationen nacheinander durchzugehen und jede einzelne Permutation eindeutig per Integer ansprechen zu können...

    Wenn ich ihn richtig verstanden habe, so will er einen besseren Zufallsgenerator, welcher eine bessere Verteilung hat, als rand . Dieser Punkt erfüllt Boost.Random.
    Und als zweites würde er gerne über einen Integer immer wieder die gleiche Zufälligkeit haben. Das geht über einen seed, wie mit srand und ist bei Boost.Random auch möglich.
    Wo liegt also das Problem?

    Entweder sehe ich die Sache zu einfach oder du sie zu kompliziert 🙂

    Grüssli


Anmelden zum Antworten