Da die meisten Antworten sich auf die Theorie konzentrierten, denke ich, dass ich etwas zur Diskussion beitragen kann, indem ich einen praktischen Test vorstelle, den ich gemacht habe. In meiner Datenbank habe ich ungefähr 4,5 Millionen UUIDs, die mit Java 8 UUID.randomUUID() generiert wurden. Die folgenden sind nur einige, die ich herausgefunden habe:
c0f55f62-b990-47bc-8caa-f42313669948
c0f55f62-e81e-4253-8299-00b4322829d5
c0f55f62-4979-4e87-8cd9-1c556894e2bb
b9ea2498-fb32-40ef-91ef-0ba00060fe64
be87a209-2114-45b3-9d5a-86d00060fe64
4a8a74a6-e972-4069-b480-bdea1177b21f
12fb4958-bee2-4c89-8cf8-edea1177b21f
Wenn es wirklich zufällig wäre, wäre die Wahrscheinlichkeit, dass solche ähnlichen UUIDs auftreten, beträchtlich gering (siehe Bearbeitung), da wir nur 4,5 Millionen Einträge betrachten. Also, obwohl diese Funktion gut ist, was Kollisionen betrifft, scheint sie mir in der Praxis nicht so gut zu sein, wie es in der Theorie wäre.
Bearbeitung:
Es scheint, dass viele Leute diese Antwort nicht verstehen, also werde ich meinen Standpunkt klären: Ich weiß, dass die Ähnlichkeiten "gering" sind und weit von einer vollständigen Kollision entfernt. Ich wollte jedoch nur Java's UUID.randomUUID() mit einem wirklich zufälligen Zahlengenerator vergleichen, was die eigentliche Frage ist.
Bei einem wirklich zufälligen Zahlengenerator wäre die Wahrscheinlichkeit, dass der letzte Fall eintritt, etwa = 0,007%. Deshalb denke ich, dass meine Schlussfolgerung Bestand hat.
Die Formel wird in diesem Wiki-Artikel erklärt: de.wikipedia.org/wiki/Geburtstagsparadoxon
14 Stimmen
In meiner Erfahrung habe ich noch nie eine Kollision gesehen ;-)
4 Stimmen
Die Algorithmen sind in RFC1422 spezifiziert: ietf.org/rfc/rfc4122.txt
8 Stimmen
@skaffman: Das RFC sagt überhaupt nichts über den verwendeten Algorithmus zur Generierung der Zufallszahlen aus.
5 Stimmen
Da es sich um eine offene Frage handelt, werde ich keine Antwort als die richtige Antwort markieren. Stattdessen werde ich jeder Antwort, die ich gut finde, eine Stimme geben :)
9 Stimmen
Von Wikipedia: ... Mit anderen Worten, nur nachdem 1 Milliarde UUIDs pro Sekunde für die nächsten 100 Jahre generiert wurden, läge die Wahrscheinlichkeit, nur einen einzigen Duplikat zu erstellen, bei etwa 50%.
0 Stimmen
Wir haben bisher 2 Kollisionen erlebt. Ich weiß nicht, wie es uns gelungen ist, sie zu verursachen :(
0 Stimmen
Die Quintessenz ist also, dass eine Kollision möglich ist. Es ist möglich, dass die ersten 2 UUIDs, die Sie generieren, identisch sind. Unwahrscheinlich, ja.
1 Stimmen
@MaVRoSCy es ist "mindestens einer" und nicht nur "einer"
1 Stimmen
Wenn Sie nicht zwei IDs innerhalb derselben Sekunde generieren müssen, ist es zu 100 % sicher für das aktuelle Datum + die Uhrzeit.