Sono rimasto piuttosto colpito dall'eleganza nella risposta @whuber. Ad essere sincero, ho dovuto fare molta conoscenza di nuovi concetti per seguire i passaggi della sua soluzione. Dopo aver trascorso molto tempo, ho deciso di pubblicare quello che ho ottenuto. Quindi ciò che segue è una nota esegetica alla sua risposta già accettata. In questo modo non vi è alcun tentativo di originalità e il mio unico obiettivo è fornire alcuni punti di ancoraggio aggiuntivi per seguire alcuni dei passaggi coinvolti.
Quindi eccolo qui ...
1. Perché ? 2nBene, questo potrebbe essere troppo semplice: abbiamo bisogno di un numero pari di persone per giocare.
2. Possiamo derivare la formula per gli squilibri?
Seguendo la voce di Wikipedia con l'esempio basato sull'abbinamento di persone e cappelli , cappelli per essere precisi, abbiamo che le opzioni per la prima persona che prendono un cappello sono mostrate qui come segue:n
d(n)=(n−1)[d(n−2)+d(n−1)]=
=nd(n−2)−d(n−2)+nd(n−1)−d(n−1) , che può essere riorganizzato come:
d(n)−nd(n−1)=−[d(n−1)−(n−1)d(n−2)] .
Ora notando il parallelismo tra LHS di questa equazione e la parte su RHS tra parentesi possiamo continuare ricorsivamente:
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)
Ciò implica che .d(n)=nd(n−1)+(−1)n
Lavorare all'indietro:
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)
Quindi in generale,
d(n)=n!(1−1+12!−13!+14!+⋯+1n!)
E ricordando la serie di Taylor di valutata in :exx=−1
d(n)≈n!e
3. Trasposizione disgiunta : il concetto di trasposizione è facile da ottenere dal collegamento fornito nella risposta originale , ma "disgiunto" era un po 'meno chiaro. Guardando un esempio, dall'insieme , la permutazione può essere espressa come un ciclo come:, ma forma un ciclo su se stesso - un ciclo disgiunto. Oppure, unendo questi due cicli, la permutazione può essere espressa come prodotto .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)
Nella domanda di Babbo Natale (otto impiegati hanno disegnato nomi in coppie perfettamente abbinate: Anna fa un regalo a Martha, mentre Martha ha disegnato il nome di Anna) ci saranno anelli chiusi.4
4. Per trovare il numero di loop a due elementi dobbiamo dividere tutte le possibili permutazionidell'insieme di otto ( ) persone per il numero totale possibile di swap di due elementi e il numero totale di permutazioni di queste coppie: .(2n)!2n2nn!p(2n)=(2n)!2nn!
Per la R
simulazione:
1. paired <- function(x) crossprod(x[x] - 1:length(x))==0
Questa funzione si riduce alla comprensione x[x]
: ha lo scopo di valutare un vettore di elementi che rappresenta i compiti attuali e determinare se è composto da anelli a 2 elementi, come nel problema di Babbo Natale. Fintanto che le permutazioni corrispondono a elementi di trasposizione in modo che se Paul dovesse inizialmente dare un regalo a Maria ( e viceversa ) e Max a John ( / ), la trasposizione risultante si tradurrà in un nuovo accoppiamento perfetto ( / e / ) stiamo soddisfando la condizione iniziale di un perfetto abbinamento:
8Paul -> Maria
Maria -> Paul
Max -> John
John -> Max
Max -> Maria
Maria -> Max
Paul -> John
John -> Paul
In altre parole, se torniamo all'esempio dei cappelli in Wikipedia, la persona riprende i
sempre il cappello .1
2. good <- function(x) sum(x==1:length(x)) == 0
Questa funzione valuta se abbiamo a che fare con uno squilibrio confrontando l' elemento vettore saggio con il vettore e assicurandoci che non vi siano coincidenze.( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 )x(1,2,3,4,5,6,7,8)
3.k.paired <- sum(i.good & i.paired)
è lì per escludere permutazioni accoppiate come quella sopra nel diagramma, che non sono disordinamenti:
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.