Digamos que dos pares y p 2 = ( a 2 , b 2 ) no son compatibles con el intercambio si se pueden colocar en cualquier orden en la lista ordenada sin intercambiar ninguno. Esto es cierto si ( a 1 ≤ a 2 ∧ b 1 ≥ b 2 ) o ( a 2 ≤ a 1 ∧ b 2 ≥ bp1=(a1,b1)p2=(a2,b2)(a1≤a2∧b1≥b2)y(a2≤a1∧b2≥b1). Tenga en cuenta que y p 2 son compatibles sin intercambio si y solo si son compatibles con dos intercambios (ya que el orden parcial definido satisface p 1 ⪯ p 2 ≡ p ∗ 2 ⪯ p ∗ 1 , donde ∗ indica la operación de intercambio) . Finalmente, p 1 y p 2 son compatibles con un intercambio si se pueden colocar en cualquier orden en la lista ordenada con exactamente uno de ellos intercambiado. Esto es cierto si p ∗ 1p1p2p1⪯p2≡p∗2⪯p∗1∗p1p2p∗1 son compatibles sin intercambio. En los casos restantes, p 1 y p 2 son simplemente incompatibles: no pueden satisfacer la condición del pedido independientemente de su estado de intercambio.p2p1p2
El problema ahora se puede resolver de la siguiente manera. Prueba cada par de pares. Si algún par es incompatible, no hay solución y podemos lanzar una excepción. De lo contrario, considere el gráfico con nodos correspondientes a los pares originales, y los bordes entre esos pares de nodos que no son compatibles con un intercambio. Cada uno de estos pares de nodos debe tener el mismo estado de intercambio en cualquier lista ordenada adecuadamente y, por lo tanto, todos los nodos en cada componente conectado del gráfico deben tener el mismo estado de intercambio. Necesitamos determinar si estos estados de intercambio de todo el componente pueden asignarse de manera consistente. Pruebe todos los pares de nodos dentro de cada componente conectado. Si algún par no es compatible sin intercambio, no hay solución y podemos lanzar una excepción. Ahora pruebe todos los pares de componentes conectados (es decir, para los componentes C1 y , pruebe todos los pares de nodos p 1 ∈ C 1 y p 2 ∈ C 2 ). Sabemos que cada par de componentes es al menos compatible con un intercambio, pero algunos pares también pueden no ser compatibles con el intercambio (porque cada par de nodos no conectados por un borde es al menos compatible con un intercambio, y también pueden no ser compatibles) compatible con intercambio). Considere un gráfico reducido con nodos correspondientes a los componentes conectados, y un borde entre dos nodos si los componentes correspondientesnosoncompatibles sin intercambio. Hay una solución al problema original si y solo si este gráfico es 2 -colorable. Si no hayC2p1∈C1p2∈C222-color, no hay solución, y podemos lanzar una excepción. Si hay uno, intercambie todos los nodos en todos los componentes de un solo color. Ahora tenemos la garantía de que cualquiera de los dos nodos son compatibles sin intercambio, por lo que podemos ordenar correctamente la lista de pares utilizando el orden parcial definido.
Cada paso en el algoritmo, y por lo tanto el algoritmo completo, se puede realizar en tiempo .O(N2)
ACTUALIZACIÓN: Una construcción mucho más elegante es la siguiente. Si un par de pares no es compatible sin intercambio, conecte los nodos correspondientes con un borde (forzándolos a tener diferentes colores en cualquier color 2). Si un par de pares no es compatible con un intercambio, conecte los nodos correspondientes con una cadena de longitud 2 (forzándolos a ser del mismo color en cualquier color 2). Hay una solución si y solo si el gráfico resultante es de 2 colores. Para construir una solución a partir de una coloración azul-roja del gráfico, intercambie solo aquellos pares cuyos nodos correspondientes sean azules, luego ordene la lista resultante.