¿Es posible que haya recordado los detalles específicos incorrectos o haya malinterpretado la pregunta?
En su descripción, elemento de en la posición b se limita a un - b ≠ ± M .
Pero si solo querían decir que la diferencia estaba restringida: a - b ≠ M ,
entonces el problema parece tratable.aba−b≠±M
a−b≠M
Resolví ese problema más simple y traté de generalizar de una manera que esperaba que pudiera dar algo de libertad para resolver el problema más grande. Pero esto simplemente me aclaró por qué es poco probable que un enfoque recursivo funcione, lo cual discuto al final.
Considere la función que da el número de permutaciones de una lista de elementos etiquetados de 1 a N , donde el elemento a en la posición b (la primera posición es 1) satisface a - b ≠ M , y b - un ≠ P .f(N,M,P)Naba−b≠Mb−a≠P
Para visualizar esto, separarlo en dos restricciones permite a y P cambiar esas restricciones por separado.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
Por conveniencia, cuando para que no imponga restricciones a las permutaciones, defina g ( N , M ) = f ( N , M , P ) . Del mismo modo, g ( N , P ) = f ( N , M , P ) cuando M ≥ N para que no imponga restricciones a las permutaciones.P≥Ng(N,M)=f(N,M,P)g(N,P)=f(N,M,P)M≥N
En el caso especial la restricción de M y P son equivalentes, por lo que se puede ignorar, lo que nos permite escribir f en términos de g :
f ( N , 0 , 0 ) = g ( N , 0 ) .M=P=0MPfg
f(N,0,0)=g(N,0).
De la simetría del problema:
f(N,M,P)=f(N,P,M)
Primero resolvamos para , y luego abordemos la f más general ( N , M , P ) .g(N,M)f(N,M,P)
Para , cada elemento tiene una restricción de ubicación (y las restricciones son distintas). Entonces, al elegir algún elemento i , lo colocaremos en alguna posición j . Hay N - 1 posibilidades diferentes para la elección de j .M=0ijN−1j
Esta selección eliminó la posición restringida para el elemento , mientras que los otros elementos ( N - 2 ) todavía tienen una restricción. Podemos dividir la ubicación de j en dos opciones:j(N−2)j
Colocar en . Esto deja a todos los demás elementos con una restricción, por lo que el problema de ubicación restante ahora se reduce a g ( N - 2 , 0 ) .ig(N−2,0)
Colocar en una posición . Esto ahora proporciona una restricción de ubicación para j , por lo que cada elemento tiene una restricción, y el problema de ubicación restante se reduce a g ( N - 1 , 0 )≠ijg(N−1,0)
Entonces esto da la fórmula recursiva:
g(N,0)=(N−1)[g(N−2,0)+g(N−1,0)]
Y al observar las situaciones simples a mano, puede obtener los casos base.
g(1,0)=0, g(2,0)=1
Esta es la fórmula recursiva de trastorno habitual.
Si bien no puedo imaginar que alguien se le ocurra esto en el acto, también resulta que hay una solución de forma cerrada para esto (consulte el artículo wiki de trastorno para más detalles).
g(N,0)=⌊n!e+12⌋
Para , no hay restricción en ninguna de las ubicaciones:M≥N
(M≥N)⟹g(N,M)=N!
0<M<NMM
i
i<Miig(N−1,M−1)
i>=Miig(N−1,M)
(0<M<N)⟹g(N,M)=(M−1)g(N−1,M−1)+(N−M+1)g(N−1,M)
g
M+P≥NN−MN−PM+P−Ng(N,M+P−N)
(M+P)≥N⟹f(N,M,P)=g(N,M+P−N)
0<M<N0<P<NM+P<Nf0<M≤P<N
PN−M−PM
MN−M−PP
Sin embargo, aquí es donde debemos terminar. Como no hay forma de avanzar con este método.
a−b≠±M
f(N,M,P)
2NN{A1,A2,...,AN}{B1,B2,...,BN}(Ai,Bj)i−j=M(Bj,Ai)j−i=MM≠0
AB
Por lo tanto, queremos una función que tome como entrada este gráfico de restricción y genere el número de permutaciones que satisfacen las restricciones.
M+P≥N, the graph is just disjoint nodes and single edges. So removing an A and B node will give a subgraph that is also disjoint nodes and single edges.
However for 0<M≤P<N, the graph can have long chains. To place a number in an available position, regardless of whether we fix the node or the position, we need to consider all the subgraphs of possible ways to build that. All the different ways of breaking up the chains will result in a "recursion" that is on the order of N parts each round, and thus can't expect much if any savings compared to checking all N! permutations.
Because there are so many possible subgraphs once chains are allowed, I really don't see how this can be solved with the usual recursive methods unless there is a clever relation saying how non-isomorphic constraint graphs are somehow equivalent for the number of permutations.
I think most likely, the question was misinterpreted. Possibly even by the interviewer (who may have forgotten the answer details themselves).