Ich war ziemlich beeindruckt von der Eleganz in @whuber Antwort. Um ehrlich zu sein, musste ich mich viel mit neuen Konzepten vertraut machen, um den Schritten in seiner Lösung zu folgen. Nachdem ich viel Zeit damit verbracht habe, habe ich beschlossen, das zu posten, was ich habe. Was folgt, ist eine exegetische Anmerkung zu seiner bereits akzeptierten Antwort. Auf diese Weise gibt es keinen Versuch der Originalität, und mein einziges Ziel ist es, einige zusätzliche Verankerungspunkte bereitzustellen, um einige der Schritte zu befolgen.
Also los geht's ...
2n
2. Können wir die Formel für Störungen ableiten?
n
d(n)=(n−1)[d(n−2)+d(n−1)]=
=nd(n−2)−d(n−2)+nd(n−1)−d(n−1)
d(n)−nd(n−1)=−[d(n−1)−(n−1)d(n−2)]
Wenn wir nun die Parallelität zwischen der LHS dieser Gleichung und dem Teil auf der RHS in Klammern bemerken, können wir rekursiv fortfahren:
d(n)−nd(n−1)=−[d(n−1)−(n−1)d(n−2)]=
=(−1)2[d(n−2)−(n−2)d(n−3)]=⋯=(−1)n−2d(2)−2d(1)
d(n)=nd(n−1)+(−1)n
Rückwärts arbeiten:
d(2)=1
d(3)=3d(2)−1=3∗1−1
d(4)=4d(3)+1=4∗3∗1−4+1
d(5)=5d(4)−1=5∗4∗3∗1−5∗4+5−1
d(6)=6d(5)+1=6∗5∗4∗3∗1−6∗5∗4+6∗5−6+1=
=6!(12−13∗2+14∗3∗2−15∗4∗3∗2+16!)=
=6!(16!−15!+14!−13!+12!−11!+1)
Also im Allgemeinen
d(n)=n!(1−1+12!−13!+14!+⋯+1n!)
exx=−1
d(n)≈n!e
a,b,c,d,e,fb,d,a,c,f,ea -> b -> d -> c after which it returns to a
e -> f
(a b d c)(e f)
4
(2n)! of the set of eight (2n) people by the total possible number of swaps of two elements 2n and the total number of permutations of these pairs n!: p(2n)=(2n)!2nn!.
For the R
simulation:
1. paired <- function(x) crossprod(x[x] - 1:length(x))==0
This function boils down to understanding x[x]
: It is meant to evaluate an 8 element vector representing the present assignments, and determine whether it is composed of 2-element loops, as in the Santa Claus problem. As long as the permutations correspond to transposing elements so that if Paul was supposed to give a present to Maria (Paul -> Maria
and vice versa, Maria -> Paul
) and Max to John (Max -> John
/ John -> Max
) initially, the resultant transposition just results in new perfect pairing (Max -> Maria
/ Maria -> Max
and Paul -> John
/ John -> Paul
) we are fulfilling the initial condition of perfect pairing:
In other words, if we go back to the example of the hats in Wikipedia person i
always takes back hat 1.
2. good <- function(x) sum(x==1:length(x)) == 0
This function evaluates whether we are dealing with a derangement by comparing the vector x element wise to the the vector (1,2,3,4,5,6,7,8), and making sure there is no coincidence.
3. k.paired <- sum(i.good & i.paired)
is there to exclude paired permutations like the one above in the diagram, which are not derangements:
v <- c(1,2,3,4,5,6,7,8)
w <- c(1,2,3,5,4,6,7,8)
(c("is v paired?" = paired(v), "is w paired?" = paired(w),
"is v a derang?" = good(w), "is w a derang?" = good(w)))
# not all paired permutations are derangements.