844 Stimmen

Das Verständnis des "Zufalls"

Ich kann mir das nicht erklären, was ist zufälliger?

rand()

OR :

rand() * rand()

Ich finde es eine echte Denksportaufgabe, könnten Sie mir helfen?


EDITAR:

Intuitiv weiß ich, dass die mathematische Antwort lauten wird, dass sie gleichermaßen zufällig sind, aber ich kann mir nicht helfen, aber ich denke, dass, wenn man den "Zufallszahlenalgorithmus" zweimal laufen lässt, wenn man die beiden miteinander multipliziert, etwas Zufälligeres entsteht als wenn man es nur einmal macht.

5 Stimmen

Hier eine naive Definition für "Zufälliger": Für manche bedeutet "zufällig" "schwer zu erraten", z. B. den Wert der obersten Karte im Stapel zu erraten. Durch das Mischen des Stapels scheint es, dass der Zufallswert "noch schwerer zu erraten" ist, und von diesem praktischen, intuitiven Verständnis des Zufalls ausgehend, wäre es sinnvoll, den Stapel im Programm auf irgendeine Weise zu "mischen". Natürlich ist das nicht das, was "Zufall" bedeutet, und die Wissenschaft der Einführung von Entropie in einen pseudozufälligen Prozess ist nicht annähernd so einfach wie das Mischen des Prozesses mit seiner eigenen Ausgabe.

0 Stimmen

Danke @Yi Jiang und @Sam Saffron für die Korrekturen, ich bin eine Tippfehler-Maschine :)

0 Stimmen

@Mild Fuzz: Die Natur leugnet unendliche Unendlichkeiten? Sind das nicht Infinitesimale? Gibt es keine Fraktale in der Natur? Oder habe ich Ihre Aussage aufgrund meiner eigenen Dummheit völlig falsch verstanden?

-1voto

sashang Punkte 10936

Es ist leicht zu zeigen, dass die Summe der beiden Zufallszahlen nicht unbedingt zufällig ist. Stellen Sie sich vor, Sie haben einen 6-seitigen Würfel und würfeln. Jede Zahl hat eine Chance von 1/6, zu erscheinen. Nehmen wir nun an, Sie haben 2 Würfel und addieren das Ergebnis. Die Verteilung dieser Summen ist nicht 1/12. Warum ist das so? Weil bestimmte Zahlen häufiger vorkommen als andere. Es gibt mehrere Partitionen von ihnen. Zum Beispiel ist die Zahl 2 nur die Summe von 1+1, aber 7 kann durch 3+4 oder 4+3 oder 5+2 usw. gebildet werden, so dass die Wahrscheinlichkeit größer ist.

Die Anwendung einer Transformation, in diesem Fall der Addition, auf eine Zufallsfunktion macht sie also nicht zufälliger und erhält auch nicht unbedingt die Zufälligkeit. Im Fall des obigen Würfels ist die Verteilung schief zu 7 und daher weniger zufällig.

-1voto

Fabian Bigler Punkte 9589

Wie bereits von anderen erwähnt, ist diese Frage schwer zu beantworten denn jeder von uns hat seine eigenes Bild des Zufalls in seinem Kopf.

Deshalb empfehle ich Ihnen dringend, sich etwas Zeit zu nehmen und diese Seite zu lesen, um eine bessere Vorstellung von Zufälligkeit zu bekommen:

Um auf die eigentliche Frage zurückzukommen. In diesem Begriff steckt nicht mehr oder weniger Zufall:

beides erscheint nur zufällig !

In beiden Fällen - nur rand() oder rand() * rand() - ist die Situation die gleiche: Nach ein paar Milliarden Zahlen wird die Folge wird wiederholt(!) . Sie erscheint für den Beobachter zufällig, weil er die gesamte Sequenz nicht kennt, aber der Computer hat keine echte Zufallsquelle - Er kann also auch keine Zufälligkeit erzeugen.

z.B.: Ist das Wetter zufällig? Wir haben nicht genügend Sensoren oder Wissen, um zu bestimmen, ob das Wetter zufällig ist oder nicht.

-2voto

dvhh Punkte 4663

Die Antwort wäre, dass es darauf ankommt, hoffentlich wäre rand()*rand() zufälliger als rand(), aber so:

  • beide Antworten hängen von der Bitgröße des Wertes ab
  • die Sie in den meisten Fällen in Abhängigkeit von einem Pseudo-Zufallsalgorithmus erzeugen (bei dem es sich meist um einen Zahlengenerator handelt, der von der Uhr Ihres Computers abhängt, und nicht so sehr vom Zufall).
  • machen Sie Ihren Code lesbarer (und beschwören Sie nicht irgendeinen Voodoo-Gott des Zufalls mit dieser Art von Mantra).

Nun, wenn Sie eine der oben genannten Möglichkeiten ankreuzen, schlage ich vor, dass Sie sich für das einfache "rand()" entscheiden. Denn Ihr Code würde mehr sein lesbar (würden Sie sich nicht fragen, warum Sie das geschrieben haben, für ...naja... mehr als 2 Sekunden), einfach zu pflegen (wenn Sie Ihre rand-Funktion durch eine super_rand ersetzen wollen).

Wenn Sie eine bessere Zufallswiedergabe wünschen, empfehle ich Ihnen, den Film von einer Quelle zu streamen, die genügend Rauschen bietet ( Radiostatik ), und dann eine einfache rand() sollte ausreichend sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X