Dado un entero y un conjunto de tripletes de enteros distintos encuentre un algoritmo que encuentre una permutación del conjunto tal que o determina correctamente que no existe tal permutación. Menos formalmente, queremos reordenar los números del 1 al ; cada Triple en indica que debe aparecer antes de en el nuevo orden, pero no debe aparecer entreS ⊆ { ( i , j , k ) ∣ 1 ≤ i , j , k ≤ n , i ≠ j , j ≠ k , i ≠ k } , π { 1 , 2 , ... , n } ( i , j , k ) ∈ S
Ejemplo 1
Supongamos que y . LuegoS = { ( 1 , 2 , 3 ) , ( 2 , 3 , 4 ) }
no es una permutación válida, porque , pero .π ( 1 ) > π ( 3 )
no es una permutación válida, porque pero .π ( 1 ) < π ( 3 ) < π ( 5 )
es una permutación válida.
Ejemplo 2
Si y , no hay permutación válida. Del mismo modo, no hay permutación válida si y ( Creo que puede haber cometido un error aquí).
Bonificación: ¿Qué propiedades de determinan si existe una solución factible?
fuente
Respuestas:
Aquí hay un algoritmo ingenuo. En última instancia, depende de la fuerza bruta, pero a veces puede funcionar bien.
Cada restricción consta de dos conjuntos; llamémoslos tipo- , , y tipo- , . Cada restricción de tipo se puede escribir de manera equivalente como una disyunción , basándose en el hecho de que .A i < k B ¬ ( i < j < k ) B i > j ∨ j > k i ≠ j , j ≠ k(σmi,σmj,σmk)∈S⟹i<k∧¬(i<j<k) A i<k B ¬(i<j<k) B i>j∨j>k i≠j,j≠k
Mi enfoque preferido sería codificarlo en un conjunto de restricciones y usar un solucionador de restricciones como Choco. Introduciría variables enteras en el rango y requeriría que todas fueran distintas. Luego codificaría cada una de las restricciones anteriores directamente como restricciones y luego dejaría que Choco haga su negocio.x i [ 0 , n - 1 ]n xi [0,n−1]
fuente
Aquí hay una respuesta parcial:
Si elimina la restricción en cada triple, entonces su problema se convierte en el problema de No-Betweeness, que es completo y no se conocen algoritmos eficientes para tales problemas. Pero con la restricción , puede forzar alguna estructura agradable que puede ser explotada para encontrar un algoritmo de tiempo polinómico para su problema.N P i < ki<k NP i<k
fuente