Hello out there!
Du meinst ArrayShuffle?
2× „hilfreich“?? Ich plädiere für die Wiedereinführung der „Nicht-hilfreich“-Bewertung.
Der dort vorgestellte Algorithmus ist ziemlicher Mist. Von einem solchen Algorithmus sollte man doch erwarten, dass er alle möglichen Permutationen mit gleicher Wahrscheinlichkeit ausgibt. Das kann dieser Algorithmus (für Anzahl der Elemente n > 2) gar nicht leisten. (Den Beweis spare ich mir für ein separates Posting auf.)
Schauen wir mal, wie schlecht er wirklich ist:
n = 3:
Wenn dreimal 0 als Zufallszahl gezogen wird:
tausche A[0] mit A[0] ABC → ABC
tausche A[1] mit A[0] ABC → BAC
tausche A[2] mit A[0] BAC → CAB
Das durchgerechnet ergibt:
000 CAB
001 BCA
002 BAC
010 CBA
011 ACB
012 ABC
020 BCA
021 ABC
022 ACB
100 CBA
101 ACB
102 ABC
110 CAB
111 BCA
112 BAC
120 ACB
121 BAC
122 BCA
200 ACB
201 BAC
202 BCA
210 ABC
211 CAB
212 CBA
220 BAC
221 CBA
222 CAB
Das ergibt folgende Häufigkeiten für die 6 möglichen Permutationen:
ABC: 4/27 ≈ 14.8%
ACB: 5/27 ≈ 18.5%
BAC: 5/27 ≈ 18.5%
BCA: 5/27 ≈ 18.5%
CAB: 4/27 ≈ 14.8%
CBA: 4/27 ≈ 14.8%
Bei Gleichverteilung müsste jede Permutation mit der Wahrscheinlichkeit 1/6 ≈ 16.7% gezogen werden. Für n = 3 ist der Algorithmus noch recht brauchbar.
n = 4:
ABCD: 10/256 ≈ 3.9%
ABDC: 10/256 ≈ 3.9%
ACBD: 10/256 ≈ 3.9%
ACDB: 14/256 ≈ 5.5%
ADBC: 11/256 ≈ 4.3%
ADCB: 9/256 ≈ 3.5%
BACD: 10/256 ≈ 3.9%
BADC: 15/256 ≈ 5.9%
BCAD: 14/256 ≈ 5.5%
BCDA: 14/256 ≈ 5.5%
BDAC: 11/256 ≈ 4.3%
BDCA: 11/256 ≈ 4.3%
CABD: 11/256 ≈ 4.3%
CADB: 11/256 ≈ 4.3%
CBAD: 9/256 ≈ 3.5%
CBDA: 11/256 ≈ 4.3%
CDAB: 11/256 ≈ 4.3%
CDBA: 10/256 ≈ 3.9%
DABC: 8/256 ≈ 3.1%
DACB: 9/256 ≈ 3.5%
DBAC: 9/256 ≈ 3.5%
DBCA: 8/256 ≈ 3.1%
DCAB: 10/256 ≈ 3.9%
DCBA: 10/256 ≈ 3.9%
bei Gleichverteilung: 1/24 ≈ 4.2%
Die Permutation BADC ist fast doppelt so wahrscheinlich wie DABC und DBCA. Aber es wird schlimmer:
n = 5
(Auszug)
BADEC: 47/3125 ≈ 1.5%
BCAED: 47/3125 ≈ 1.5%
EABCD: 16/3125 ≈ 0.5%
bei Gleichverteilung: 1/120 ≈ 0.8%
BADEC und BCAED treten mit fast dreimal so hoher Wahrscheinlichkeit auf wie EABCD. Aber damit nicht genug:
n = 6
min. rel. Häufigkeit: 0/46656 = 0
max. rel. Häufigkeit: 1080/46656 ≈ 2.3%
bei Gleichverteilung: 1/720 ≈ 0.14%
Es sind 6! = 720 Permutationen möglich. Der Algorithmus gibt aber nur 120 von diesen aus, die restlichen 600 kommen gar nicht vor!
Ich würd sagen, der Algorithmus ist unbrauchbar.
See ya up the road,
Gunnar
--
„Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (
Kirsten Evers)