Contando permutaciones cuyos elementos no son exactamente su índice ± M


13

Recientemente me preguntaron este problema en una entrevista algorítmica y no pude resolverlo.

Dados dos valores N y M, debe contar el número de permutaciones de longitud N (usando números del 1 al N) de modo que la diferencia absoluta entre cualquier número en la permutación y su posición en la permutación no sea igual a M.

Ejemplo: si N = 3 y M = 1, entonces 1 2 3 y 3 2 1 son permutaciones válidas, pero 1 3 2 no es válido ya que el número 3 está en la posición 2 y su diferencia es = M.

Intenté la programación dinámica de NxM, pero no pude formar una recurrencia que no cuenta las repeticiones.


Quizás pueda obtener una fórmula usando inclusión-exclusión. El caso M=0 se conoce clásicamente como alteraciones .
Yuval Filmus

1
Esta es una instancia particular de contar coincidencias perfectas en gráficos bipartitos, un problema que es -completo. Por supuesto, este caso particular podría ser más fácil. #P
Yuval Filmus

Ya probé la inclusión-exclusión pero no hice ningún progreso.
Gena

Podría intentar adaptar los métodos para contar los trastornos . No sé si eso te llevará a algún lado. También podría intentar arreglar M = 1 (digamos), calcular el número para valores pequeños de N (N = 1,2,3,4,5,6,7,8) por fuerza bruta, y luego buscar la secuencia correspondiente en OEIS con la esperanza de que encuentres algo útil.
DW

¿Cuál es la recursividad que configuras? ¿Qué quieres decir con "contar repeticiones"?
Raphael

Respuestas:


2

Lo primero que preguntaría cuando me dieran esta pregunta sería

¿Quieres un algoritmo de tiempo polinómico?

y luego espero que la respuesta sea 'no'. Sospecho que este problema es NP-hard, por la siguiente razón:

El enfoque natural de este problema es considerar la ubicación del primer número y derivar una fórmula recursiva para colocar los otros. Esto funciona bien para el caso (es decir, contar el número de alteraciones), ya que no importa en qué posición haya colocado el primer número, ya que solo hay una posición 'ilegal' de cada número. En otras palabras, este enfoque conduce a subproblemas independientes.M=0

Para , esto no es tan simple, ya que ahora podemos tener 2 posiciones ilegales para algunos números. Cuál de estas posiciones permanecen en el subproblema ahora es relevante para la solución del subproblema. Solo considerar el número de posiciones 'ilegales' no es suficiente, ya que las 'cadenas' de números que comparten una posición ilegal son necesarias para determinar la estructura de los subproblemas de ese subproblema. Entonces, este enfoque conduce esencialmente al siguiente subproblema:M>02

Dado un conjunto , un conjunto B N tanto de tamaño como máximo N como un número natural M , cuente el número de coincidencias perfectas en el gráfico bipartito ( A , B , E ) , donde ( a , b ) E si y solo si | a - b | M .ANBNNM(A,B,E)(a,b)E|ab|M

Este problema parece difícil. El único enfoque para este problema que veo es la inclusión / exclusión, que no conducirá a un algoritmo de tiempo polinómico.

Podemos considerar enfoques que no se basan en la colocación iterativa de los números, pero no tengo idea de cómo lo haría. (¡especialmente durante una entrevista!)

Por supuesto, todo esto es mera especulación y aún es posible que un truco inteligente pueda dar una solución de tiempo polinomial, pero espero haber hecho un argumento convincente de que este truco tiene que ser muy inteligente.

Quizás sea posible mostrar la dureza de NP reduciendo este problema a # 2-SAT (las 'cadenas' de números que comparten posiciones ilegales parecen una opción no trivial que podría combinarse con la selección de un valor de verdad), pero No he visto una forma obvia de hacerlo desde ahora.


En caso de que el entrevistador esté realmente satisfecho con un algoritmo de tiempo exponencial, simplemente generaría todas las soluciones posibles adaptando un algoritmo de retroceso recursivo para generar una permutación para excluir este caso en particular.


Dije que puedo dar un algoritmo de tiempo exponencial, pero me pidieron una solución de tiempo polinomial que funciona cuando N es <= 1000.
Gena

1
Bueno, a menos que recuerdes o malinterpretes la pregunta como sugiere la respuesta de PPenguin, creo que esta pregunta es hecha por entrevistadores muy exigentes, entrevistadores que interpretaron mal la pregunta o tal vez incluso como una pregunta que no esperan que nadie resuelva . Incluso si esta pregunta no fuera computacionalmente difícil, lo más probable es que sea una entrevista difícil.
Lagarto discreto

Parece que M = 1 probablemente sea factible (y, por lo tanto, posiblemente los otros), por lo que hay algo que nos perdimos. ¿Me pueden ayudar a entender / evaluar el caso M = 1? Hice una pregunta por separado cs.stackexchange.com/questions/74674/…
PPenguin

2

¿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.abab±M
abM


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)NababMbaP

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.PNg(N,M)=f(N,M,P)g(N,P)=f(N,M,P)MN

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=0ijN1j

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(N2)j

  1. 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(N2,0)

  2. 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(N1,0)

Entonces esto da la fórmula recursiva:

g(N,0)=(N1)[g(N2,0)+g(N1,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:MN

(MN)g(N,M)=N!

0<M<NMM

i

  1. i<Miig(N1,M1)

  2. i>=Miig(N1,M)

(0<M<N)g(N,M)=(M1)g(N1,M1)+(NM+1)g(N1,M)

g

M+PNNMNPM+PNg(N,M+PN)

(M+P)Nf(N,M,P)=g(N,M+PN)

0<M<N0<P<NM+P<Nf0<MP<N

PNMPM

MNMPP

Sin embargo, aquí es donde debemos terminar. Como no hay forma de avanzar con este método.


ab±M

f(N,M,P)

2NN{A1,A2,...,AN}{B1,B2,...,BN}(Ai,Bj)ij=M(Bj,Ai)ji=MM0

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+PN, 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<MP<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).


Why is your constraint graph directed? What do the directions mean?
Discrete lizard

@Discretelizard The two directions (a->b vs b->a) distinguish between where the constraint came from (the '+' or the '-' version of the constraint). It's not really needed, because it doesn't matter the origin of the constraint, it just made it easier for me to visualize what was going on.
PPenguin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.