Usted pide en los comentarios cómo llegué $181440$ o $14963$. El primero es $9! / 2$ que es el número de posibles arreglos en la segunda sesión, después de tomar en cuenta las rotaciones y reflexiones. Sólo teniendo en cuenta las rotaciones sería $9! = 362880$
El número sin duplicados los vecinos que obtuve con el siguiente código R, el uso de la planta para generar todos los $362880$ de posibilidades de que la persona con la $1$ en el primer lugar, y a contar:
library(combinat)
seated <- 10
perms <- matrix(unlist(permn(seated-1)), ncol = seated-1, byrow = TRUE)
permsextended <- cbind(1, perms+1, 1)
pairs <- 100 * permsextended[,-(seated+1)] + permsextended[,-1]
originalpairs <- c(100*(1:(seated-1)) + (2:seated), 100*seated + 1,
100*(2:seated) + (1:(seated-1)), 100*1 + seated)
dupes <- matrix(pairs %in% originalpairs, ncol=seated)
totaldupes <- rowSums(dupes)
nodupes <- permsextended[totaldupes==0, -(seated+1)]
Que da
> nrow(nodupes)
[1] 29926
> nrow(nodupes) / factorial(seated-1)
[1] 0.08246803
y yo dividido $29926$ $2$ conseguir $14963$.
Estos son los primeros ejemplos que se encuentran
> head(nodupes)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 7 2 9 3 10 4 6 8 5
[2,] 1 7 2 10 3 9 4 6 8 5
[3,] 1 7 2 9 3 8 4 6 10 5
[4,] 1 7 2 10 3 8 4 6 9 5
[5,] 1 7 2 8 3 10 4 6 9 5
[6,] 1 7 2 8 3 9 4 6 10 5
Hay más curiosidades en los datos. Por ejemplo, si el número de la primera sesión de$1$$10$, los que tienen los números a continuación son más propensos a estar sentado justo enfrente de la persona $1$ en la segunda sesión, es decir, en la sexta posición relativa:
> table(nodupes[,6])
2 3 4 5 6 7 8 9 10
4318 2844 3186 3048 3134 3048 3186 2844 4318
Si en lugar de un conteo completo, tengo que hacer una simulación (no limitante reproductor $1$ en la segunda sesión), me sale algo similar con
set.seed(1)
cases <- 1000000
seated <- 10 # should be less than 100
originalpairs <- c(100*(1:(seated-1)) + (2:seated), 100*seated + 1,
100*(2:seated) + (1:(seated-1)), 100*1 + seated)
runningcount <- 0
for (i in 1:cases){
example <- sample(seated)
examplextend <- c(example, example[1])
examplepairs <- 100 * examplextend[-(seated+1)] + examplextend[-1]
runningcount <- runningcount + (sum(examplepairs %in% originalpairs)==0)
}
llegar
> runningcount / cases
[1] 0.082199