m unterschiedliche zufällig Zahlen aus 0 bis n ziehen, c++ funktion?


  • Mod

    RandomName schrieb:

    Hat das eigenlich auch einen Namen oder selbst ausgedacht?

    Ja. 🕶



  • Zieh einfach 10 mal Zahlen zwischen 0 und 9 und addiere zur n. Zahl n*10



  • SeppJ schrieb:

    Gibt es nicht fertig, aber ist leicht selber zu programmieren:
    1. Liste mit den Werten, aus denen gezogen werden soll machen
    2. Zufälligen Wert daraus ziehen
    3. Gezogenen Wert aus der Liste entfernen
    4. Schritte 2. und 3. wiederholen bis die gewünschte Anzahl Werte gezogen wurde

    Geht noch einen Tick einfacher.
    1. Array mit gültigen Werten befüllen.
    2. random-shuffle auf diesem Array ausführen.
    3. die ersten n Werte nehmen und fertig. 🙂


  • Mod

    Fricky667 schrieb:

    SeppJ schrieb:

    Gibt es nicht fertig, aber ist leicht selber zu programmieren:
    1. Liste mit den Werten, aus denen gezogen werden soll machen
    2. Zufälligen Wert daraus ziehen
    3. Gezogenen Wert aus der Liste entfernen
    4. Schritte 2. und 3. wiederholen bis die gewünschte Anzahl Werte gezogen wurde

    Geht noch einen Tick einfacher.
    1. Array mit gültigen Werten befüllen.
    2. random-shuffle auf diesem Array ausführen.
    3. die ersten n Werte nehmen und fertig. 🙂

    Wieder mal Quatsch. Dadurch hast du viel mehr Rechenaufwand, ohne jeden Zugewinn.



  • SeppJ schrieb:

    Dadurch hast du viel mehr Rechenaufwand, ohne jeden Zugewinn.

    Meinst du wirklich? Die STL hat doch eine Random-Shuffle-Funktion. Ist die wirklich so schlecht (aus Benutzersicht wie auch Processor-Cycles betreffend)?



  • der Aufruf ist jedenfalls recht einfach:

    random_shuffle (&a[erstes_element], &a[letztes_element+1]);
    

    das müsste mal einer benchmarken, um es mit dem SeppJ-Algorithmus laufzeitmäßig zu vergleichen. Intuitiv sehe ich keinen von beiden vorn. 🙂



  • Fricky667 schrieb:

    der Aufruf ist jedenfalls recht einfach:

    random_shuffle (&a[erstes_element], &a[letztes_element+1]);
    

    1.: Warum nicht begin(a) und end(a)?
    2.: Warum eine Function der STL nehmen, die deprecated ist? --> std::shuffle

    das müsste mal einer benchmarken, um es mit dem SeppJ-Algorithmus laufzeitmäßig zu vergleichen. Intuitiv sehe ich keinen von beiden vorn. 🙂

    Ist nicht offensichtlich, dass SeppJs Algo schneller ist? Nimm an, du willst 1 Element aus 10^7 ziehen. Mit SeppJ musst du ein Element ziehen und bist fertig. Du müsstest dagegen erst das gesamte Array durchmischen. Offensichtlich ist das schlechter. Schauen wir uns den anderen Extremfall an, dass man alle Zahlen zieht. Dann müssen beide Algorithmen gleich viel tun und wir haben Gleichstand (zumindest ungefähr, kommt sicher auf die genaue Implementierung an). Also ist SeppJs Algo nie langsamer, aber fast immer schneller.



  • wob schrieb:

    Fricky667 schrieb:

    der Aufruf ist jedenfalls recht einfach:

    random_shuffle (&a[erstes_element], &a[letztes_element+1]);
    

    1.: Warum nicht begin(a) und end(a)?
    2.: Warum eine Function der STL nehmen, die deprecated ist? --> std::shuffle

    das müsste mal einer benchmarken, um es mit dem SeppJ-Algorithmus laufzeitmäßig zu vergleichen. Intuitiv sehe ich keinen von beiden vorn. 🙂

    Ist nicht offensichtlich, dass SeppJs Algo schneller ist? Nimm an, du willst 1 Element aus 10^7 ziehen. Mit SeppJ musst du ein Element ziehen und bist fertig. Du müsstest dagegen erst das gesamte Array durchmischen. Offensichtlich ist das schlechter. Schauen wir uns den anderen Extremfall an, dass man alle Zahlen zieht. Dann müssen beide Algorithmen gleich viel tun und wir haben Gleichstand (zumindest ungefähr, kommt sicher auf die genaue Implementierung an). Also ist SeppJs Algo nie langsamer, aber fast immer schneller.

    Bist du ein Doppelaccount von SeppJ? 😃

    Mein Vorschlag hängt nun mal stark von der Performance der shuffle-Implementation ab. Ich behaupte ja nicht, dass mein Vorschlag superschnell ist. Aber er ist straight-forward. schritt 1, 2, 3, und fertig. Für den Noob absolut easy zu implementieren.

    Überhaupt finde ich es sehr befremdlich, dass sich C++ Coder um Taktzyklen scheren. Das ist im Grunde eine Bankrotterklärung an C, Mother of all modern computer languages, *GG*


  • Mod

    Fricky667 schrieb:

    Bist du ein Doppelaccount von SeppJ? 😃

    Nur weil andere Leute dir auch erklären(!), dass dein Vorschlag Quatsch ist, sind die anderen Leute nicht ich. Dein Vorschlag ist Quatsch. Wenn du den Erklärungen zuhören würdest, könntest du vielleicht sogar etwas lernen.

    Mein Vorschlag hängt nun mal stark von der Performance der shuffle-Implementation ab. Ich behaupte ja nicht, dass mein Vorschlag superschnell ist. Aber er ist straight-forward. schritt 1, 2, 3, und fertig. Für den Noob absolut easy zu implementieren.

    Hast du den Thread gelesen? Oder wenigstens die Eingangsfrage? Es geht um Perfomance und absolut nicht um deinen Noob-Müll:

    randomName schrieb:

    Es gibt ja std::random_shuffle, die shuffelt aber alle 100 Zahlen. Wenn ich nun aber 1000 aus 1.000.000 haben möchte ist das viel Arbeit umsonst.

    Du hast zudem die Erklärung von wob offensichtlich nicht gelesen 🙄
    random_shuffle macht einfach viel zu viel Arbeit umsonst, weil es ganz etwas anderes tut, als hier gesucht wird. Da hilft keine noch so effiziente Implementierung. 10^10 Zahlen zu mischen dauert auf egal welche Weise eine Ewigkeit. Wenn du den Erklärungen ausnahmsweise mal zuhören würdest, könntest du vielleicht sogar etwas lernen.

    Überhaupt finde ich es sehr befremdlich, dass sich C++ Coder um Taktzyklen scheren. Das ist im Grunde eine Bankrotterklärung an C, Mother of all modern computer languages, *GG*

    Quatsch, mal wieder.



  • SeppJ schrieb:

    Nur weil andere Leute dir auch erklären(!), dass dein Vorschlag Quatsch ist, sind die anderen Leute nicht ich. Dein Vorschlag ist Quatsch.

    bleib locker, alter. der vorschlag ist cool, weil total easy. nur die taktzyklenzähler werden eventuell damit hadern. mach doch 'n benchmark. 🙂


  • Mod

    Fricky667 schrieb:

    SeppJ schrieb:

    Nur weil andere Leute dir auch erklären(!), dass dein Vorschlag Quatsch ist, sind die anderen Leute nicht ich. Dein Vorschlag ist Quatsch.

    bleib locker, alter. der vorschlag ist cool, weil total easy. nur die taktzyklenzähler werden eventuell damit hadern. mach doch 'n benchmark. 🙂

    Quatsch, mal wieder. Es war explizit nach effizienten Lösungen gefragt. Es braucht auch keinen Benchmark, wob hat erklärt, wieso dein Lösung immer schlechter ist. Aber nichts von alledem hast du gelesen. Mal wieder.



  • SeppJ schrieb:

    Fricky667 schrieb:

    SeppJ schrieb:

    Nur weil andere Leute dir auch erklären(!), dass dein Vorschlag Quatsch ist, sind die anderen Leute nicht ich. Dein Vorschlag ist Quatsch.

    bleib locker, alter. der vorschlag ist cool, weil total easy. nur die taktzyklenzähler werden eventuell damit hadern. mach doch 'n benchmark. 🙂

    Quatsch, mal wieder. Es war explizit nach effizienten Lösungen gefragt. Es braucht auch keinen Benchmark, wob hat erklärt, wieso dein Lösung immer schlechter ist. Aber nichts von alledem hast du gelesen. Mal wieder.

    lass das man den OP entscheiden, ob er meinen vorschlag akzeptabel findet. du tust ja gerade so, als hätte ich dir etwas schlimmes angetan. alles klar bei dir?


  • Mod

    Fricky667 schrieb:

    du tust ja gerade so, als hätte ich dir etwas schlimmes angetan. alles klar bei dir?

    Du strapazierst die Gesamtqualität des Forums, indem du zu sämtlichen Themen schlecht durchdachte Antworten gibst (oft ohne überhaupt den Thread gelesen zu haben), die korrigiert werden müssen. Wenn man dich korrigiert, liest du die Erklärungen nicht, sondern wiederholst deinen Quatsch. Beispiel dieser Thread: Die Diskussion hätte allerspätestens bei wobs Korrektur enden müssen, der sehr genau erklärt, warum die Lösung schlecht ist.

    Fricky667 schrieb:

    lass das man den OP entscheiden, ob er meinen vorschlag akzeptabel findet.

    Denkst du?

    randomName schrieb:

    Es gibt ja std::random_shuffle, die shuffelt aber alle 100 Zahlen. Wenn ich nun aber 1000 aus 1.000.000 haben möchte ist das viel Arbeit umsonst.

    Aber all dies habe ich auch schon 3x gesagt. Ich habe sogar schon einmal den TE zitiert um dir zu zeigen, dass deine Variante ausdrücklich nicht gewünscht war. Du wiederholst deinen Quatsch trotzdem noch. Erinnert mich sehr an einen ehemaligen User, den du kennen dürftest...



  • SeppJ schrieb:

    Fricky667 schrieb:

    du tust ja gerade so, als hätte ich dir etwas schlimmes angetan. alles klar bei dir?

    Du strapazierst die Gesamtqualität des Forums, indem du zu sämtlichen Themen schlecht durchdachte Antworten gibst

    Ich bin halt nur ein unwissender Forenuser, wie die meisten anderen hier, und schreibe nur was mein begrenzter Erkenntnisvorrat bieten kann. Wenn Diskussion außerhalb der Lehrmeinung hier unerwünscht sind, dann lass es mich wissen.

    Was sagt eigentlich Marc++us zu Typen wie dir? Oder ist der nicht mehr Admin? Kommt mir fast so vor ... 😞


  • Mod

    Fricky667 schrieb:

    Was sagt eigentlich Marc++us zu Typen wie dir?

    SeppJ ist eines der wertvollsten Mitglieder dieses Forums, und sein Verhalten läuft i.d.R. eine kalkulierte Linie zwischen professioneller Zurückhaltung und angemessener Kritik. Nichts, was er angesprochen hat, ist unwahr.

    Ich bin halt nur ein unwissender Forenuser, wie die meisten anderen hier

    Das ist Ok. Der Punkt ist, dass Du Unsinn redest, und dann nach einer Erklärung anderer Forenuser versuchst, die Unsinnigkeit Deiner Aussage zu relativieren. Bspw.

    Mein Vorschlag hängt nun mal stark von der Performance der shuffle-Implementation ab.

    Nein. Weil Dein Vorschlag rein von der Komplexität völliger Quatsch ist. Da hängt nichts von konkreten Implementierungen ab.

    du tust ja gerade so, als hätte ich dir etwas schlimmes angetan.

    Ja, Du bist nämlich unfähig, aus deinen Fehlern zu lernen. Das hat dich jetzt unbeliebt gemacht, und entsprechend ist SeppJs Antwort gereizt. Nächstes mal solltest Du erst antworten, wenn Du überzeugt bist, die Thematik durchdacht zu haben.



  • Arcoth schrieb:

    Das hat dich jetzt unbeliebt gemacht, und entsprechend ist SeppJs Antwort gereizt.

    der muss sich halt ein bisschen am riemen reißen. dann geht das. 🙂


  • Mod

    Fricky667 schrieb:

    Arcoth schrieb:

    Das hat dich jetzt unbeliebt gemacht, und entsprechend ist SeppJs Antwort gereizt.

    der muss sich halt ein bisschen am riemen reißen. dann geht das. 🙂

    Gönn Dir erstmal 'n Duden, Diggi.



  • Arcoth schrieb:

    Fricky667 schrieb:

    Arcoth schrieb:

    Das hat dich jetzt unbeliebt gemacht, und entsprechend ist SeppJs Antwort gereizt.

    der muss sich halt ein bisschen am riemen reißen. dann geht das. 🙂

    Gönn Dir erstmal 'n Duden, Diggi.

    kein akt, gibts umsonst im inet. 😃


  • Mod

    Fricky667 schrieb:

    kein akt, gibts umsonst im inet. 😃

    Für dich ist ein Wörterbuch umsonst, für alle anderen gratis.



  • SeppJ schrieb:

    Fricky667 schrieb:

    kein akt, gibts umsonst im inet. 😃

    Für dich ist ein Wörterbuch umsonst, für alle anderen gratis.

    jetzt lass mal das hassen sein, kumpel. make love not war. 🙂


Anmelden zum Antworten