Fiquei bastante impressionado com a elegância na resposta @whuber. Para ser sincero, tive que me familiarizar com novos conceitos para seguir as etapas de sua solução. Depois de gastar muito tempo nisso, decidi postar o que consegui. Então, o que se segue é uma nota exegética à sua resposta já aceita. Dessa forma, não há tentativa de originalidade, e meu único objetivo é fornecer alguns pontos de ancoragem adicionais para seguir algumas das etapas envolvidas.
Então aqui vai ...
2 n
2. Podemos derivar a fórmula para desarranjos?
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)]
Agora, observando o paralelismo entre o LHS dessa equação e a parte do RHS entre parênteses, podemos continuar recursivamente:
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
Trabalhando para trás:
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)
Então, em geral,
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)!2n2nn!p(2n)=(2n)!2nn!
Para a R
simulação:
1 paired <- function(x) crossprod(x[x] - 1:length(x))==0
x[x]
8 vetor de elementos representando as atribuições atuais e determinar se ele é composto de loops de 2 elementos, como no problema do Papai Noel. Enquanto as permutações corresponderem a elementos de transposição, de modo que, se Paulo deveria dar um presente a Maria ( Paul -> Maria
e vice-versa Maria -> Paul
) e Max a John ( Max -> John
/ John -> Max
) inicialmente, a transposição resultante resultaria em um novo emparelhamento perfeito ( Max -> Maria
/ Maria -> Max
e Paul -> John
/ John -> Paul
) estamos cumprindo a condição inicial de emparelhamento perfeito:
Em outras palavras, se voltarmos ao exemplo dos chapéus em i
1
2) good <- function(x) sum(x==1:length(x)) == 0
x(1,2,3,4,5,6,7,8)
3.k.paired <- sum(i.good & i.paired)
existe para excluir permutações emparelhadas como a acima no diagrama, que não são perturbações:
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.