Keine doppelte Zufallszahl

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Bob

Betreff: Keine doppelte Zufallszahl

BeitragSa, Jul 17, 2004 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

ich such eine Möglichkeit bei der initialiseirung einesProgramms eine Zufallszahl zwischen 0 und n zu generieren und zu speichern.
(n kann bis ca. 1.000.000 sein)
Als Ergebniss darf keine Zahl doppelt vorkommen.
Wie die Zahl gespeichert wird ist egal (type, bank, array)
Wichtig ist das ich dann mit einer simplen for next Sschleife über alle Elemente gehen kann.
Ich meine hier schon mal soetwas gesehen zu haben. Kann es aber nicht mehr finden.
Alternativ kann auch eine Unsort function genutzt werden. Allerdings sind die hier bisher gesehenen functionen selbst für eien "Initialisierung" viel zu langsam Crying or Very sad (Jedenfalls wenn n > 50.000)

Bin dankbar für jeden Tip

Travis

BeitragSa, Jul 17, 2004 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe die Fragestellung nicht ganz. Du willst am Anfang eine Zufallszahl von (0 bis z.B. 1.000.000) erstellen? Und die soll nicht doppelt vorkommen. Es ist nur eine, mit was könnte sich die Zahl denn gleichen?

Oder meinst du, das du mehrere Zufallszahlen (bis zu 1.000.000) erstellen möchtest und nicht willst, dass du mehrere Gleiche Zahlen hast.

Oder möchtest du bei jedem Programmstart eine Zahl erzeugen und dann z.B. in einer externen Datei abspeichern. Und bei jedem Programmstart sol eine Zahl erzeugt werden, die es vorher noch nie gab?
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
  • Zuletzt bearbeitet von Travis am Sa, Jul 17, 2004 20:28, insgesamt einmal bearbeitet

Gina

BeitragSa, Jul 17, 2004 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke schon, dass er mehrere Zufallszahlen ziehen will. Die Frage ist, wie viele. Ich denke mal wenns ein paar hundert oder so sind, läßt sich das mit einem Type-Feld machen, aber wenns zu viele sind... Puhh, dauert das ständige suchen bestimmt sehr lange...

Darf man fragen, wozu genau du das brauchst? Vielleicht fällt einem dann noch ne andere Möglichkeit ein...

Gina.

Bob

BeitragSa, Jul 17, 2004 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.
Hab mich vielleicht unklar ausgedrückt.
Ich möchte am Anfang Zahlen von 0 bis 1.000.000 haben.
Keine darf dopelt sein. (Falls mit Rand generiert).
Es geht auch:

For i = 0 to 1000000
Zhal(i) = i
next

Dann müsste das Zahl Array aber durcheinander gewürfelt werden so das wenn ich später mit:

For i = 0 to 1000000
Print Zhal(i)
next

Folgendes bekomme

752
745862
2
456325
856324
usw usw.

Ich hoffe es wird nun deutlicher.

Blatolo

BeitragSa, Jul 17, 2004 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
zeit=MilliSecs()
SeedRnd MilliSecs()
anzahl=1000000
Dim array(anzahl)
For i=0 To anzahl
   array(i)=i
Next

For i=0 To anzahl
   zufall=Rand(0,anzahl)
   temp=array(zufall)
   array(zufall)=array(i)
   array(i)=temp
Next
zeit=MilliSecs()-zeit
Print zeit+" ms"
WaitKey

Das wäre z.B. eine Möglichkeit.
dauert bei mir insgesamt 365 ms.
Erst wird das array erstellt und danach werden die werte hineingeschrieben.
Daraufhin werden die einfach willkürlich vertauscht was einem unsort gleichkommt.

Bob

BeitragSa, Jul 17, 2004 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Blatolo

bei mir 512 ms
Ganz ausgezeichnet.
War genau das was ich gesucht habe.
Bin (mal wieder ) selbst nicht drauf gekommen.
Besten Dank.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group