Joerg: Randomized sequence, wie? (Algorithmus gesucht)

Hi,

Ich suche einen Algorithmus, der mir aus einer durchgehenden Zahlenreihe - z.B. von 1 bis N - alle Zahlen in zufaelliger Folge ausgeben kann. Jede Zahl muss dabei genau 1x vorkommen (also etwa wie bei einer Ziehung von Zetteln aus einem Hut ;-)

Wie "wirklich zufaellig" die Reihe ist, spielt keine Rolle. Hintergrund ist uebrigens der Test einer Anwendung, die vielfach mit denselben Datensaetzen, aber in "halbwegs zufaelliger" Folge, gefuettert werden soll.

Ich hab zwar gegoogelt, aber ausser viel Theorie habe ich leider weder Algorithmus noch Pseudocode gefunden ...

Gruss & Dank fuer Tips,

  • Joerg
  1. Joerg,

    #generiere Liste L mit N Zahlen
    FOR i = 0 TO N-1
      L[i] = i
    NEXT i

    #Liste Z zufällig gezogener Zahlen
    FOR i = N-1 TO 0 STEP -1
      generiere Zufallszahl r aus [0, i[
      Z[i] = L[r]   #nächste gezogene Zahl
      streiche dieses Element aus der Liste L
    NEXT i

    Live long and prosper,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    1. Hallo Gunnar,

      FOR i = N-1 TO 0 STEP -1
        generiere Zufallszahl r aus [0, i[

      da du die Schleife mit N-1 beginnst, darfst du die Zufallszahl getrost aus [0..i] wählen. Solltest du sogar, sonst ist dein Intervall im letzten Durchlauf undefiniert: [0..0[ ergibt keinen Sinn. ;-)

      Bye,

      Martin

      --
      Um die Wahrheit zu erfahren, muss man den Menschen widersprechen.
        (George Bernhard Shaw)
      1. FOR i = N-1 TO 0 STEP -1
          generiere Zufallszahl r aus [0, i[

        da du die Schleife mit N-1 beginnst, darfst du die Zufallszahl getrost aus [0..i] wählen. Solltest du sogar,

        Hi Martin,
        Zuerst hatte ich tatsächlich FOR i = N TO 1 STEP -1 …

        So ist das, wenn man mal bei 0 und mal bei 1 anfängt zu zählen …

        Live long and prosper,
        Gunnar

        PS. Monate fangen bei 1 an zu zählen …

        PPS. Und du fragst dich jetzt sicher, ob ich noch andere Interpunktionszeichen kenne …

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
        1. PS. Monate fangen bei 1 an zu zählen …

          Wenn du meinst. ;-)

          PPS. Und du fragst dich jetzt sicher, ob ich noch andere Interpunktionszeichen kenne …

          *rofl*

          Martin

          --
          Ja, ja... E.T. wusste schon, warum er wieder nach Hause wollte.
        2. Hi,

          PS. Monate fangen bei 1 an zu zählen …

          Unsinn, Monate fangen bei -1 zu zählen an:

          Dezember 10 (Dezi ...)
          November 9 (Nove ...)
          Oktober 8 (Okta ...)
          September 7 (Sept ...)
          ==>
          August 6
          Juli 5
          Juni 4
          Mai 3
          April 2
          März 1
          Februar 0
          Januar -1

          ;-)

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Dezember 10 (Dezi ...)
            November 9 (Nove ...)
            […]
            März 1

            „Die Umstellung auf den gregorianischen Kalender erfolgte nicht überall zur gleichen Zeit.“ [[http://forum.de.selfhtml.org/archiv/2005/10/t117328/#m751377@title=MudGuard]]

            Andreas, bei dir erfolgte sie noch gar nicht? ;-)

            Live long and prosper,
            Gunnar

            PS. Was war eigentlich der Sinn, den Jahresanfang vom 1. März auf den 1. Januar zu verlegen?

            --
            „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    2. Hi Gunnar,

      FOR i = N-1 TO 0 STEP -1
        generiere Zufallszahl r aus [0, i[
        Z[i] = L[r]   #nächste gezogene Zahl
        streiche dieses Element aus der Liste L
      NEXT i

      Danke - das "streiche dieses Element aus der Liste" hatte ich vergessen ... die Sache mit dem Wald und den Baeumen ? ;-)

      Gruss & Merci,

      • Joerg