Supponiamo che due coppie e p 2 = ( a 2 , b 2 ) non siano compatibili con lo swap se possono essere inserite in entrambi gli ordini nell'elenco ordinato senza scambiare nessuno dei due. Questo è vero se ( 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) . Si noti che p 1 e p 2 sono compatibili senza scambio se e solo se sonocompatibili con due scambi(poiché l'ordine parziale definito soddisfa p 1 ⪯ p 2 ≡ p ∗ 2 ⪯ p ∗ 1 , dove ∗ indica l'operazione di scambio) . Infine, p 1 e p 2 sonocompatibili con uno scambiose possono essere inseriti in entrambi gli ordini nell'elenco ordinato con uno di essi esattamente scambiato. Questo è vero se p ∗ 1 e( a2≤ a1∧ b2≥ b1)p1p2p1⪯ p2≡ p*2⪯ p*1*p1p2p*1 sono compatibili senza scambio. Nei restanti casi, p 1 e p 2 sono semplicemente incompatibili: non possono soddisfare le condizioni dell'ordine indipendentemente dal loro stato di scambio.p2p1p2
Il problema ora può essere risolto come segue. Prova ogni coppia di coppie. Se una coppia è incompatibile, non esiste una soluzione e possiamo generare un'eccezione. In caso contrario, considerare il grafico con nodi corrispondenti alle coppie originali e bordi tra quelle coppie di nodi che non sono compatibili con uno scambio. Ciascuna di tali coppie di nodi deve avere lo stesso stato di scambio in qualsiasi elenco correttamente ordinato, e quindi tutti i nodi in ciascun componente collegato del grafico devono avere lo stesso stato di scambio. Dobbiamo determinare se questi stati di scambio a livello di componente possono essere assegnati in modo coerente. Testa tutte le coppie di nodi all'interno di ciascun componente collegato. Se una coppia non è compatibile no-swap, non esiste una soluzione e possiamo generare un'eccezione. Ora testare tutte le coppie di componenti collegati (cioè, per i componenti C1e , testare tutte le coppie di nodi p 1 ∈ C 1 e p 2 ∈ C 2 ). Sappiamo che ogni coppia di componenti è almeno compatibile con uno scambio, ma alcune coppie potrebbero anche non essere compatibili con lo scambio (poiché ogni coppia di nodi non collegati da un bordo è almeno compatibile con uno scambio e potrebbe anche non essere compatibile con swap). Considera un grafico ridotto con nodi corrispondenti ai componenti collegati e uno spigolo tra due nodi se i componenti corrispondenti non sono compatibili senza scambio. C'è una soluzione al problema originale se e solo se questo grafico è a 2 colori. Se non ce n'è 2C2p1∈ C1p2∈ C222-colore, non esiste soluzione e possiamo fare un'eccezione. Se ce n'è uno, scambia tutti i nodi in tutti i componenti di un singolo colore. Ora siamo garantiti che due nodi qualsiasi non sono compatibili con lo scambio e quindi possiamo ordinare correttamente l'elenco di coppie usando l'ordine parziale definito.
Ogni fase dell'algoritmo, e quindi l'intero algoritmo, può essere eseguita in tempo .O ( N2)
AGGIORNAMENTO: Una costruzione molto più elegante è la seguente. Se una coppia di coppie non è compatibile no-swap, collega i nodi corrispondenti con un bordo (forzandoli ad avere colori diversi in qualsiasi 2 colori). Se una coppia di coppie non è compatibile con uno scambio, collegare i nodi corrispondenti con una catena di lunghezza 2 (costringendoli ad avere lo stesso colore in qualsiasi 2 colori). C'è una soluzione se e solo se il grafico risultante è bicolore. Per costruire una soluzione da una colorazione blu-rossa del grafico, scambia solo quelle coppie i cui nodi corrispondenti sono blu, quindi ordina l'elenco risultante.