Nun, ich hatte ein bisschen Spaß mit diesem. Das erste, woran ich dachte, als ich das Problem zum ersten Mal las, war die Gruppentheorie (insbesondere die symmetrische Gruppe S n ). Die for-Schleife baut einfach eine Permutation σ in S n auf, indem sie bei jeder Iteration Transpositionen (dh Swaps) zusammensetzt. Meine Mathematik ist nicht allzu spektakulär und ich bin ein bisschen verrostet. Wenn meine Notation nicht stimmt, nimm sie mit.
Überblick
Sei A
das Ereignis, dass unser Array nach der Permutation unverändert bleibt. Wir sind schließlich gebeten , die Wahrscheinlichkeit von Ereignis zu finden A
, Pr(A)
.
Meine Lösung versucht, das folgende Verfahren zu befolgen:
- Berücksichtigen Sie alle möglichen Permutationen (dh Neuordnungen unseres Arrays).
- Partitionieren Sie diese Permutationen in disjunkte Mengen basierend auf der Anzahl der darin enthaltenen sogenannten Identitätstranspositionen . Dies hilft, das Problem auf gleichmäßige Permutationen zu reduzieren .
- Bestimmen Sie die Wahrscheinlichkeit, die Identitätspermutation zu erhalten, vorausgesetzt, die Permutation ist gerade (und von einer bestimmten Länge).
- Summieren Sie diese Wahrscheinlichkeiten, um die Gesamtwahrscheinlichkeit zu erhalten, mit der das Array unverändert bleibt.
1) Mögliche Ergebnisse
Beachten Sie, dass jede Iteration der for-Schleife einen Swap (oder eine Transposition ) erzeugt, der eines von zwei Dingen ergibt (aber niemals beide):
- Zwei Elemente werden vertauscht.
- Ein Element wird mit sich selbst ausgetauscht. Für unsere Absichten und Zwecke bleibt das Array unverändert.
Wir kennzeichnen den zweiten Fall. Definieren wir eine Identitätsumsetzung wie folgt:
Eine Identitätsumsetzung tritt auf, wenn eine Nummer mit sich selbst ausgetauscht wird. Das heißt, wenn n == m in der obigen for-Schleife ist.
Für jeden Lauf des aufgelisteten Codes erstellen wir N
Transpositionen. 0, 1, 2, ... , N
In dieser "Kette" können Identitätsumwandlungen auftreten.
Betrachten Sie zum Beispiel einen N = 3
Fall:
Given our input [0, 1, 2].
Swap (0 1) and get [1, 0, 2].
Swap (1 1) and get [1, 0, 2]. ** Here is an identity **
Swap (2 2) and get [1, 0, 2]. ** And another **
Beachten Sie, dass es eine ungerade Anzahl von Nichtidentitätstranspositionen gibt (1) und das Array geändert wird.
2) Partitionierung basierend auf der Anzahl der Identitätstranspositionen
Sei K_i
das Ereignis, dass i
Identitätstranspositionen in einer gegebenen Permutation auftreten. Beachten Sie, dass dies eine vollständige Aufteilung aller möglichen Ergebnisse darstellt:
- Keine Permutation kann zwei verschiedene Größen von Identitätstranspositionen gleichzeitig haben, und
- Alle möglichen Permutationen müssen zwischen
0
und N
Identitätstranspositionen haben.
Somit können wir das Gesetz der Gesamtwahrscheinlichkeit anwenden :
Jetzt können wir endlich die Partition nutzen. Beachten Sie, dass das Array bei einer ungeraden Anzahl von Nichtidentitäts- Transpositionen auf keinen Fall unverändert bleiben kann *. So:
* Aus der Gruppentheorie ist eine Permutation gerade oder ungerade, aber niemals beides. Daher kann eine ungerade Permutation nicht die Identitätspermutation sein (da die Identitätspermutation gerade ist).
3) Bestimmen von Wahrscheinlichkeiten
Wir müssen nun zwei Wahrscheinlichkeiten für N-i
gerade bestimmen :
Die erste Amtszeit
Der erste Term repräsentiert die Wahrscheinlichkeit, eine Permutation mit i
Identitätstranspositionen zu erhalten. Dies stellt sich als binomisch heraus, da für jede Iteration der for-Schleife:
- Das Ergebnis ist unabhängig von den Ergebnissen davor und
- Die Wahrscheinlichkeit, eine Identitätstransposition zu erzeugen, ist nämlich dieselbe
1/N
.
Daher ist für N
Versuche die Wahrscheinlichkeit, i
Identitätstranspositionen zu erhalten, wie folgt:
Die zweite Amtszeit
Also , wenn Sie es bis hierher geschafft haben, haben wir das Problem zu finden , reduziert für N - i
selbst. Dies stellt die Wahrscheinlichkeit dar, eine Identitätspermutation zu erhalten, wenn i
die Transpositionen Identitäten sind. Ich verwende einen naiven Zählansatz, um die Anzahl der Wege zum Erreichen der Identitätspermutation über die Anzahl möglicher Permutationen zu bestimmen.
Betrachten Sie zuerst die Permutationen (n, m)
und (m, n)
Äquivalente. Dann sei M
die Anzahl der möglichen Nichtidentitätspermutationen. Wir werden diese Menge häufig verwenden.
Ziel ist es, die Anzahl der Möglichkeiten zu bestimmen, wie eine Sammlung von Transpositionen kombiniert werden kann, um die Identitätspermutation zu bilden. Ich werde versuchen, die allgemeine Lösung neben einem Beispiel von zu konstruieren N = 4
.
Betrachten wir den N = 4
Fall bei allen Identitätstranspositionen ( dh i = N = 4
). Stellen wir X
eine Identitätstransposition dar. Für jeden X
gibt es N
Möglichkeiten (sie sind :) n = m = 0, 1, 2, ... , N - 1
. Somit gibt es N^i = 4^4
Möglichkeiten, die Identitätspermutation zu erreichen. Der Vollständigkeit halber addieren wir den Binomialkoeffizienten C(N, i)
, um die Reihenfolge der Identitätstranspositionen zu berücksichtigen (hier ist er nur gleich 1). Ich habe versucht, dies unten mit dem physischen Layout der obigen Elemente und der Anzahl der folgenden Möglichkeiten darzustellen:
I = _X_ _X_ _X_ _X_
N * N * N * N * C(4, 4) => N^N * C(N, N) possibilities
Jetzt, ohne explizit N = 4
und zu ersetzen i = 4
, können wir den allgemeinen Fall betrachten. Wenn wir das Obige mit dem zuvor gefundenen Nenner kombinieren, finden wir:
Das ist intuitiv. In der Tat sollte Sie jeder andere Wert als 1
wahrscheinlich alarmieren. Denken Sie darüber nach: Wir erhalten die Situation, in der alle N
Transpositionen als Identitäten bezeichnet werden. Was ist wahrscheinlich, dass das Array in dieser Situation unverändert bleibt? Klar , 1
.
N = 4
Betrachten wir nun noch einmal zwei Identitätstranspositionen ( dh i = N - 2 = 2
). Als Konvention werden wir die beiden Identitäten am Ende platzieren (und später bestellen). Wir wissen jetzt, dass wir zwei Transpositionen auswählen müssen, die, wenn sie komponiert werden, zur Identitätspermutation werden. Platzieren wir ein Element an der ersten Stelle und nennen es t1
. Wie oben erwähnt, gibt es M
Möglichkeiten, vorausgesetzt, es t1
handelt sich nicht um eine Identität (es kann nicht so sein, wie wir bereits zwei platziert haben).
I = _t1_ ___ _X_ _X_
M * ? * N * N
Das einzige Element, das möglicherweise noch an der zweiten Stelle verbleiben könnte, ist das Inverse von t1
, was tatsächlich der Fall ist t1
(und dies ist das einzige Element aufgrund der Eindeutigkeit des Inversen). Wir schließen wieder den Binomialkoeffizienten ein: In diesem Fall haben wir 4 offene Stellen und wir möchten 2 Identitätspermutationen platzieren. Wie viele Möglichkeiten können wir das tun? 4 wählen Sie 2.
I = _t1_ _t1_ _X_ _X_
M * 1 * N * N * C(4, 2) => C(N, N-2) * M * N^(N-2) possibilities
Betrachtet man noch einmal den allgemeinen Fall, so entspricht dies alles:
Schließlich machen wir den N = 4
Fall ohne Identitätstranspositionen ( dh i = N - 4 = 0
). Da es viele Möglichkeiten gibt, wird es schwierig und wir müssen aufpassen, dass wir nicht doppelt zählen. In ähnlicher Weise beginnen wir, indem wir ein einzelnes Element an die erste Stelle setzen und mögliche Kombinationen ausarbeiten. Nehmen Sie die einfachste zuerst: die gleiche Umsetzung 4 Mal.
I = _t1_ _t1_ _t1_ _t1_
M * 1 * 1 * 1 => M possibilities
Betrachten wir nun zwei einzigartige Elemente t1
und t2
. Es gibt M
Möglichkeiten für t1
und nur M-1
Möglichkeiten für t2
(da t2
kann nicht gleich sein t1
). Wenn wir alle Vorkehrungen ausschöpfen, bleiben uns die folgenden Muster:
I = _t1_ _t1_ _t2_ _t2_
M * 1 * M-1 * 1 => M * (M - 1) possibilities (1)st
= _t1_ _t2_ _t1_ _t2_
M * M-1 * 1 * 1 => M * (M - 1) possibilities (2)nd
= _t1_ _t2_ _t2_ _t1_
M * M-1 * 1 * 1 => M * (M - 1) possibilities (3)rd
Betrachten wir nun drei einzigartige Elemente, t1
, t2
, t3
. Lassen Sie uns t1
zuerst und dann platzieren t2
. Wie immer haben wir:
I = _t1_ _t2_ ___ ___
M * ? * ? * ?
Wir können noch nicht sagen, wie viele Möglichkeiten t2
es noch geben kann, und wir werden gleich sehen, warum.
Wir platzieren uns jetzt t1
auf dem dritten Platz. Beachten Sie, t1
dass wir dorthin gehen müssen, da wir, wenn wir an der letzten Stelle hingehen würden, nur das (3)rd
obige Arrangement neu erstellen würden . Doppelzählung ist schlecht! Dadurch bleibt das dritte eindeutige Element t3
an der endgültigen Position.
I = _t1_ _t2_ _t1_ _t3_
M * ? * 1 * ?
Warum mussten wir uns eine Minute Zeit nehmen, um die Anzahl der t2
s genauer zu betrachten ? Die Transpositionen t1
und t2
können keine disjunkten Permutationen sein ( dh sie müssen eine (und nur eine, da sie auch nicht gleich sein können) von ihrem n
oder teilen m
). Der Grund dafür ist, dass wir die Reihenfolge der Permutationen vertauschen könnten, wenn sie disjunkt wären. Dies bedeutet, dass wir die (1)st
Anordnung doppelt zählen würden .
Sagen Sie t1 = (n, m)
. t2
muss von der Form (n, x)
oder (y, m)
für einige sein x
und y
um nicht disjunkt zu sein. Beachten Sie, dass x
möglicherweise nicht n
oder m
und y
viele nicht n
oder sind m
. Somit ist die Anzahl der möglichen Permutationen, t2
die sein könnten, tatsächlich 2 * (N - 2)
.
Kommen wir also zu unserem Layout zurück:
I = _t1_ _t2_ _t1_ _t3_
M * 2(N-2) * 1 * ?
Jetzt t3
muss die Umkehrung der Zusammensetzung von sein t1 t2 t1
. Machen wir es manuell:
(n, m)(n, x)(n, m) = (m, x)
Also t3
muss sein (m, x)
. Hinweis : Dies ist nicht zu disjunkt t1
und nicht entweder gleich t1
oder t2
so gibt es keine Doppelzählung für diesen Fall.
I = _t1_ _t2_ _t1_ _t3_
M * 2(N-2) * 1 * 1 => M * 2(N - 2) possibilities
Zum Schluss noch alles zusammen:
4) Alles zusammenfügen
Das war's. Arbeiten Sie rückwärts und ersetzen Sie das, was wir gefunden haben, durch die ursprüngliche Summe in Schritt 2. Ich habe die Antwort auf den folgenden N = 4
Fall berechnet . Es stimmt sehr genau mit der empirischen Zahl überein, die in einer anderen Antwort gefunden wurde!
N = 4
M = 6 _________ _____________ _________
| Pr (K_i) | Pr (A | K_i) | Produkt |
_________ | _________ | _____________ | _________ |
| | | | |
| i = 0 | 0,316 | 120/1296 | 0,029 |
| _________ | _________ | _____________ | _________ |
| | | | |
| i = 2 | 0,211 | 6/36 | 0,035 |
| _________ | _________ | _____________ | _________ |
| | | | |
| i = 4 | 0,004 | 1/1 | 0,004 |
| _________ | _________ | _____________ | _________ |
| | |
| Summe: | 0,068 |
| _____________ | _________ |
Richtigkeit
Es wäre cool, wenn es ein Ergebnis in der Gruppentheorie gäbe, das hier angewendet werden könnte - und vielleicht gibt es das! Es würde sicherlich dazu beitragen, dass all diese mühsamen Zählungen vollständig verschwinden (und das Problem auf etwas viel eleganteres verkürzen). Ich hörte auf zu arbeiten N = 4
. Denn N > 5
was gegeben ist, gibt nur eine Annäherung (wie gut, ich bin nicht sicher). Es ist ziemlich klar, warum das so ist, wenn Sie darüber nachdenken: Zum Beispiel gibt es bei gegebenen N = 8
Transpositionen eindeutig Möglichkeiten, die Identität mit vier einzigartigen Elementen zu schaffen, die oben nicht berücksichtigt wurden. Die Anzahl der Wege wird anscheinend schwieriger zu zählen, wenn die Permutation länger wird (soweit ich das beurteilen kann ...).
Jedenfalls konnte ich so etwas im Rahmen eines Interviews definitiv nicht machen. Wenn ich Glück hätte, würde ich bis zum Nenner kommen. Darüber hinaus scheint es ziemlich böse.
N
und einen festen Startwert ist die Wahrscheinlichkeit entweder0
oder1
weil sie überhaupt nicht zufällig ist.