Ist es möglich, dass Sie sich an die genauen Details erinnern oder die Frage falsch interpretiert haben?
In Ihrer Beschreibung ist Element in Position b auf a - b ≤ ± M beschränkt .
Aber wenn sie nur bedeuteten, dass der Unterschied begrenzt war: a - b ≠ M ,
dann scheint das Problem auffindbar zu sein.aba - b ≤ ± M
a−b≠M
Ich arbeitete dieses einfachere Problem aus und versuchte es so zu verallgemeinern, dass ich hoffte, etwas Freiheit bei der Lösung des größeren Problems zu haben. Aber das hat für mich nur klargestellt, warum ein rekursiver Ansatz sehr unwahrscheinlich ist, worüber ich am Ende spreche.
Betrachten Sie die Funktion die die Anzahl der Permutationen einer Liste von Elementen mit der Bezeichnung 1 bis N angibt , wobei das Element a in Position b (erste Position ist 1) a - b ≠ M erfüllt und b - a ≠ P .f(N,M,P)Naba−b≠Mb−a≠P
Um dies zu veranschaulichen, können und P diese Einschränkungen separat verschieben , indem sie sie in zwei Abhängigkeiten unterteilen .MP
1 2 3 4 5 M=0, restricted values for each position
. . . . . (positions in list)
1 2 3 4 5 P=0, restricted values for each position
3 4 5 M=2, restricted values for each position
. . . . . (positions in list)
1 2 3 4 P=1, restricted values for each position
Wenn der Einfachheit halber damit die Permutationen nicht eingeschränkt werden, definieren Sie g ( N , M ) = f ( N , M , P ) . In ähnlicher Weise ist g ( N , P ) = f ( N , M , P ), wenn M ≥ N ist, so dass die Permutationen nicht eingeschränkt werden.P≥Ng(N,M)=f(N,M,P)g(N,P)=f(N,M,P)M≥N
In dem speziellen Fall die Bedingungen von M und P äquivalent, so dass man sie ignorieren kann, so dass wir f in Form von g schreiben können :
f ( N , 0 , 0 ) = g ( N , 0 ) .M=P=0MPfg
f(N,0,0)=g(N,0).
Aus der Symmetrie des Problems:
f(N,M,P)=f(N,P,M)
Lösen wir zuerst nach und packen dann das allgemeinere f ( N , M , P ) an .g(N,M)f(N,M,P)
Für hat jedes Element eine Platzierungsbeschränkung (und die Einschränkungen sind unterschiedlich). Wenn Sie also ein Element i auswählen , platzieren Sie es an einer Position j . Es gibt N - 1 verschiedene Möglichkeiten für die Wahl von j .M=0ijN−1j
Diese Auswahl hob die eingeschränkte Position für Element , während die anderen ( N - 2 ) Elemente immer noch eine Einschränkung aufweisen. Wir können die Platzierung von j in zwei Optionen aufteilen:j(N−2)j
Platziere in . Dies lässt alle anderen Elemente mit einer Einschränkung, so dass das verbleibende Platzierungsproblem jetzt auf g ( N - 2 , 0 ) reduziert wird .ig(N−2,0)
Platzieren Sie in einer Position . Dies ergibt nun eine Platzierungsbeschränkung für j , und so hat jedes Element eine Einschränkung, und das verbleibende Platzierungsproblem wird auf g ( N - 1 , 0 ) reduziert.≠ijg(N−1,0)
Das ergibt also die rekursive Formel:
g(N,0)=(N−1)[g(N−2,0)+g(N−1,0)]
Und durch Betrachten der einfachen Situationen von Hand, können die Basisfälle erhalten.
g(1,0)=0, g(2,0)=1
Dies ist die übliche derangement-rekursive Formel.
Ich kann mir zwar nicht vorstellen, dass jemand vor Ort darauf kommt, aber es stellt sich heraus, dass es dafür eine geschlossene Lösung gibt (siehe den Wiki-Artikel zur Störung für Details).
g(N,0)=⌊n!e+12⌋
Für gibt es keine Beschränkung für eine der Platzierungen:M≥N
(M≥N)⟹g(N,M)=N!
Mit haben die ersten M Elemente keine Einschränkungen und die verbleibenden Elemente haben eine Platzierungsbeschränkung. In Bezug auf die Positionen lassen die letzten M Positionen alle Zahlen zu.0<M<NMM
Wählen Sie für die letzte Position ein Element . Es gibt zwei Möglichkeiten, wie die verbleibende Platzierung aussieht:i
Wenn , dann hatte ich keine Platzierungsbeschränkungen. Wenn ich also i benutze , werden die Beschränkungen für keine Position geändert. Wir haben auch eine Position ohne Einschränkung entfernt, sodass die verbleibende Platzierung wie folgt aussieht: g ( N - 1 , M - 1 ) .i<Miig(N−1,M−1)
Wenn , dann hatte ich eine Platzierungsbeschränkung und wir haben eine Position ohne Einschränkung entfernt. Da ich platziert wurde, kann die Position, auf die sie von jetzt an beschränkt war, jede der verbleibenden Zahlen akzeptieren. Die verbleibende Position sieht also wie folgt aus: g ( N - 1 , M ) .i>=Miig(N−1,M)
Das ergibt also die rekursive Formel:
(0<M<N)⟹g(N,M)=(M−1)g(N−1,M−1)+(N−M+1)g(N−1,M)
Damit ist die rekursive Lösung für .g
Wenn , unterliegen die ersten N - M Positionen einer Beschränkung für eine einzelne Zahl, die letzten N - P Positionen einer Beschränkung für eine einzelne Zahl und die mittleren M + P - N Positionen keiner Beschränkung. Dies ist genau wie der Fall g ( N , M + P - N ) .M+P≥NN−MN−PM+P−Ng(N,M+P−N)
(M+P)≥N⟹f(N,M,P)=g(N,M+P−N)
Wir haben derzeit alle Fälle mit Ausnahme von und 0 < P < N so behandelt, dass M + P < N . Hier gelten für einige Elemente mehrere Einschränkungen. Aufgrund der Symmetrie in f können wir 0 < M ≤ P < N ohne Verlust der Allgemeinheit betrachten.0<M<N0<P<NM+P<Nf0<M≤P<N
Die ersten Positionen haben eine einzige Einschränkung, dann N - M - P- Positionen mit zwei Einschränkungen, dann haben die letzten M- Positionen eine einzige Einschränkung.PN−M−PM
Betrachtet man die Elemente, haben die ersten Elemente eine einzige Einschränkung, dann haben die N - M - P Elemente zwei Einschränkungen, dann haben die letzten P Elemente eine einzige Einschränkung.MN−M−PP
Hier müssen wir jedoch aufhören. Da gibt es mit dieser Methode keinen Ausweg.
Ich habe die beiden Bedingungen getrennt, weil ich sah, dass das Platzieren einer Zahl an einer ausgewählten Position die Anzahl der einzelnen Bedingungen für die Bedingung "+" und die Bedingung "-" von Gleichgewicht bringen kann .a−b≠±M
Bei dem allgemeineren Problem führt das Entfernen einer Position durch Einfügen einer Zahl jedoch nicht immer zu einem Unterproblem, das mit .f(N,M,P)
Um diese Einschränkungen für die Permutation zu visualisieren, betrachtet einen gerichteten Graphen mit Knoten, eine Gruppe von N markierten { A 1 , A 2 , . . . , A N } und ein anderer markierter { B 1 , B 2 , . . . , B N } . Eine gerichtete Kante ( A i , B j ) existiert, wenn i - j = M ist2NN{A1,A2, . . . , AN}{ B1, B2, . . . , BN}( Aich, Bj)i - j = Mund eine gerichtete Kante existiert, wenn j - i = M und M ≤ 0 ist .( Bj, Aich)j - i = MM≠ 0
Die Menge der Knoten kann als die Nummern angesehen werden, die wir in einer Liste permutieren, und die der B- Knoten als ihre möglichen Positionen. Dieses Diagramm zeigt die Einschränkungen. In der Grafik werden keine Zyklen angezeigt. Es werden immer ein oder mehrere nicht zusammenhängende Knoten oder Ketten der Länge sein.EINB
Wir wollen also eine Funktion, die diesen Beschränkungsgraphen als Eingabe verwendet und die Anzahl der Permutationen ausgibt, die die Beschränkungen erfüllen.
M+ P≥ N
0 < M≤ P< NNN!
Da es so viele mögliche Untergraphen gibt, wenn Ketten erlaubt sind, sehe ich wirklich nicht, wie dies mit den üblichen rekursiven Methoden gelöst werden kann, es sei denn, es gibt eine kluge Beziehung, die besagt, wie nicht-isomorphe Beschränkungsgraphen für die Anzahl der Permutationen irgendwie äquivalent sind.
Ich denke höchstwahrscheinlich wurde die Frage falsch interpretiert. Möglicherweise sogar vom Interviewer (der die Antwortdetails selbst vergessen hat).