Thema: Delphi Random ohne Dublette

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: Random ohne Dublette

  Alt 13. Jan 2007, 11:17
Siehst du und da unterscheidet sich mein Meinung was elegant ist erheblich von deiner.

Ausgehend von der Forderung das wir eine Urne von 6 Zahlen haben, 1 bis 6 und daraus per Zufall nun alle 6 Zahlen ziehen ergeben sich reale Erfordernisse.

1.) es ist eine zufällige Permutation
2.) es ergeben sich exakte Wahrscheinlichkeiten für jede gezogene Zahl

Elegant ist es nun exakt diese Rahmenbedingungen einzuhalten und eventuell ohne die vorherige Erzeugung der Urne auskommen zu können.
Trivial ist es diese Urne zu allozieren und daraus die 6 Zahlen per Zufall zu ziehen.
An der Realität vorbei ist es

a.) solange per Zufall eine Zahl zu erzeugen bis wir eine ziehen die wir noch nicht hatten -> verfälschte bedingte Wahrscheinlichkeiten die nocht der Realität entspricht
b.) die Urne falsch zu mischen, zb. eben 6 mal jeweils 2 Zufallsindizes erzeugen und dann diese zu vertauschen -> verfälschte bedingte Wahrscheinlichkeiten

Extrembeispiel:

Wir wollen aus 10 Milliarden Zahlen nur 3 eindeutige Zahlen ziehen. Elegent ist es die maximale Größe der Urne auf diese 3 Zahlen beschränken zu können. Unelegant ist es ein Array mit 10 Milliarden Zahlen anzulegen und dann 10 Milliarden mal diese per Zufall zu mischen.

Elegant ist also eine Lösung als Funktion die für alle möglichen Anwendungsfälle effizient funktioneren kann, auch wenn es in einem konkreten Fall nicht sofort als Vorraussetzung für diese Funktion als erfoderlich gilt. Denn so hat man eine BlackBox einmalig programmiert die wiederverwendet werden kann ohne das man sie anpassen muß.

Das ist meine Definition von elegant aus Sicht einer Einschätzung der Qualität einer Funktion, neben den Aspekten der Performance, Komplexität und Einfachheit.
"Keep it simple" ist auch eine meiner Devisen, aber nicht auf Teufel komm raus, also Kompromißbasiert (ich meine du denkst da ähnlich). Völlig falsch ist es aber sich nicht an die Rahmenbedingungen zu halten oder jedesmal eine Denkarbeit von Neuem machen zu wollen. Dann lieber beim ersten mal 25% mehr Zeit investiert und gleich was gutes erdacht.

Gruß Hagen

PS: übrigens erfüllt meine obige Funktion "Lotto" eben auch diese Anforderungen. Man kann mit ihr aus 10 Milliarden Zahlen 3 eindeutige und zufällige erzeugen und dabei die begingten Wahrscheinlichkeiten der Realität auch einhalten.Man kann aber auch ganz simpel nur 6 Zahlen aus 6 ziehen ohne das dabei die Peformance oder der Platzverbrauch schlechter wäre als bei den trivialen Lösungen.
  Mit Zitat antworten Zitat