Proverò a dimostrare che questo problema è NP-difficile, mediante riduzione da .Planar-3-SAT
Riduzione da Planar-3-SAT
Alcuni gadget di base
I gadget sono configurazioni interne della geometria che ci consentiranno di costruire cancelli da utilizzare in un circuito, a cui .Planar-3-SAT
4X3-gadget
Questo gadget ha due stati di partizione minimi quadrati validi :
A sinistra un gadget 4X3 . Centro e destra: due possibili stati di partizione quadrata minima .
5X4-gadget
Questo gadget è esattamente come un gadget 4X3 , solo con dimensioni maggiori.
A sinistra un gadget 5X4 . Centro e destra: due possibili stati di partizione quadrata minima .
endpoint-gadget
TF
Sinistra: wireframe dell'endpoint-gadget . Centro: endpoint con valore vero. A destra: endpoint a valore falso.
gadget i-wire
Un gadget i-wire è l'abbreviazione di implication wire .
Regole:
Esempio:
72
Ecco come viene utilizzato:
Figura 8,9 , sinistra: i-wire wireframe attraverso due punti finali . A destra: Unione.
Ora, se un endpoint è nello stato giusto, forza l'altro endpoint in una posizione spinta. Esempio:
Sinistra: diagramma di partizione quadrato; l'interruttore sinistro è in basso, "spinge" tutti i quadrati in basso sull'i-wire e infine, spinge l'altro interruttore ( punto finale ). A destra: diagramma di partizione quadrato; l' endpoint sinistro è pieno, "spinge" tutti i quadrati lungo l' i-wire e forza l' endpoint a sinistra su "up".
A⟹¬BA⟹B
Tuttavia, questo lascia il caso non vincolato:
Se combiniamo due i-fili , possiamo ottenere un'implicazione a due vie, essenzialmente un'uguaglianza booleana (in):
Quindi, due i-fili possono portare una relazione di uguaglianza completa, proprio come un circuito - in realtà, è un circuito. Useremo queste coppie per costruire un filo utilizzabile .
l−12+2
i-fili possono essere orientati secondo necessità.
filo
Un filo è costituito da una coppia di i-fili che sono collegati alle stesse porte in corrispondenza di ciascun endpoint.
- I -fili sono di colore rosso e verde.
- 3
- Ogni perno del cancello avrà un contatto verde e rosso; un filo deve collegarsi correttamente.
- Regola invariante: un i-wire deve essere spinto nella direzione opposta dell'altro i-wire , ogni gate lo assume e lo assicura (se non diversamente indicato).
- Poiché ogni filo contiene un'implicazione a due vie, trasporta i valori da una porta all'altra come un filo in un circuito.
- Ogni filo deve essere collegato a un cancello ad entrambe le estremità. . In caso contrario si possono rovinare i presupposti di alcune porte che descrivo e la regola invariante sopra; tuttavia, le porte che hanno endpoint attraverso i cavi sono sicure: è possibile collegare i fili randagi a questi endpoint senza preoccuparsi di rovinare il cancello.
- i fili devono avere una lunghezza dispari, compresi i conduttori di qualsiasi circuito a cui si collega; tuttavia descriverò di seguito un portone dispari che consente a un filo di lunghezza pari di diventare dispari.
Immagini :
Sopra: un filo .
Sinistra e destra: due possibili stati di partizione quadrata minima di un filo . Nota che se il filo ha solo questa lunghezza, non sarà in grado di spostarsi verso destra o sinistra e dovrà rompere un quadrato in pezzi più piccoli.
i fili possono essere orientati secondo necessità.
cancello piegato : piegare un filo
Sinistra: vista wireframe. A destra: vista dell'Unione.
Nota l'uso del gadget 4X3 . Viene utilizzato per fissare il cavo rosso alla lunghezza dispari.
Di seguito sono riportati i due possibili stati di partizione minima quadrata della curva:
Sinistra e destra: due possibili stati di partizione quadrata minima quadrata di un filo di curvatura.
Il cancello può essere orientato secondo necessità. Ovviamente, questo cancello può essere specchiato per funzionare nell'altra direzione.
Inclinare un filo
È facile spostare un filo sopra. Illustrazione di wireframe:
di nome-valore-gate
Un gate con valore nominale è essenzialmente un endpoint come gate con un contatto a filo:
odd-skip-gate : dispari saltando un filo
A volte è scomodo avere solo fili di lunghezza dispari. Per esempio:
Come puoi vedere, quel po 'di estensione è un po' fastidioso. Ecco una soluzione corrispondente, usando il 4X3-gate :
Quindi, trasformandolo in un gate, otteniamo il dispari-skip-gate (in wireframe):
Il cancello può essere orientato secondo necessità.
twist-gate : torcendo un filo
A volte ottieni i fili rossi e neri sui lati sbagliati da usare con un cancello . In questo caso, viene fornito un cancello a spirale, per torcere i fili rossi e neri sui lati opposti.
Illustrazione di wireframe:
Convinciti che funziona:
A
Il cancello può essere orientato secondo necessità.
split-gate : divisione di un filo
Dividere un filo, wireframe:
Convinciti che funziona:
A
A
Nota: ogni filo che entra e esce dallo splitter deve assolutamente collegarsi a un endpoint da qualche parte, al fine di mantenere l'invariante. In alternativa, è possibile aggiungere endpoint a ciascuna delle coppie di derivazioni dello splitter.
Il cancello può essere orientato secondo necessità.
non-gate
Il cancello non prende un filo ed emette un filo che ha le implicazioni inverse. Fondamentalmente è un cancello a spirale , tranne per il fatto che ri-etichetta i coloranti dei fili. Il not-gate si presenta così:
E una vista dei due possibili stati:
Il cancello può essere orientato secondo necessità.
clausola-gate
Per la clausola-gate , introduciamo innanzitutto il clausola-gadget :
3
Ecco come appare il cancello:
3
Spiegazione:
- Inizia dal gadget-clausola e segui le frecce.
- Le linee non a freccia indicano che fa parte di un circuito, ma non è forzato in uno stato dal gate.
- Lo stato del gadget clausola impone che uno degli endpoint sia valutato vero .
3-CNF
Il cancello può essere orientato secondo necessità.
Riduzione
Φ(x)Planar-3-SAT
Φ(x)=∧niCi,C={(xj∨xk∨xl)}
Un aiuto visivo (fonte originale: Terrain Guarding è NP-Hard (PDF) , riprodotto in tikz):
Poi:
- xi∈xxi¬xi
- Collega le porte l'una all'altra con un non-gate , in modo che neghino logicamente i valori reciproci.
- Posiziona i poligoni delle 'porte' delle variabili nelle loro posizioni nell'incorporamento planare.
- Per ogni clausola, posiziona una porta- clausola nella posizione della clausola nell'incorporamento planare.
- Usando le porte sopra descritte, collega tutte le variabili alle loro clausole.
- Esegui un algoritmo di partizione quadrata minima sull'unione risultante di tutti i poligoni del gate (l'intero circuito).
- Se l'algoritmo restituisce la somma di tutte le dimensioni minime dello stato della partizione quadrata (sottraendo per gli angoli condivisi), allora è soddisfacente. Se non è soddisfacente, costringerà un gadget vincolato a dividersi in quadrati più piccoli, aumentando così il numero di quadrati necessari per partizionare il circuito.
Perché funziona
- Ogni gadget ha una dimensione minima dello stato di partizione quadrata ; vale a dire, una partizione quadrata minima di quel gadget ha una certa dimensione.
- Alcuni gadget hanno diversi stati con queste dimensioni; ciascuno di questi stati sono partizioni quadrate minime valide .
- Quando i gadget vengono combinati solo negli angoli, la somma degli stati di partizione quadrata minima dei gadget è * ancora lo stato di partizione quadrata minima della loro unione; puoi vederlo in modo intuitivo: il collegamento all'angolo non dà ampio spazio a un quadrato per espandersi / connettersi con un quadrato di un altro gadget.
- Mentre la combinazione di gadget all'angolo non riduce le dimensioni totali della partizione minima quadrata , mette in relazione e vincola l'uno con l'altro.
- Con le porte mostrate sopra, puoi limitare abbastanza gli stati, in modo che se la formula logica non è soddisfacente, uno o più gadget dovranno rompersi in quadrati ancora più piccoli e aumentare le dimensioni della partizione minima quadrata .
fonti grafiche
Puoi anche vedere immagini più grandi rimuovendo i suffissi "s", "m", "l" degli URL imgur. Ad esempio, puoi vedere un'immagine più grande di questo: http://i.stack.imgur.com/6CKlGs.jpg andando su
http://i.stack.imgur.com/6CKlG.jpg . Notare le "s" mancanti prima di .jpg
.