Piastrellatura di un poligono ortogonale con quadrati


12

Dato un poligono ortogonale (un poligono i cui lati sono paralleli agli assi), voglio trovare il più piccolo insieme di quadrati interni-disgiunti, la cui unione equivale al poligono.

Ho trovato diversi riferimenti a problemi leggermente diversi, come ad esempio:

Sto cercando un algoritmo per la piastrellatura minima con i quadrati .


mmm posso immaginare che sia NP-difficile. Proverò a formulare qualcosa.
Realz Slaw,

1
La versione di minimizzazione con fori consentiti è NP-Hard, ma per poligoni ortogonali semplicemente collegati (cioè senza fori) ha un algoritmo polinomiale. Tuttavia, se nel tuo problema le dimensioni sono intere e intendi davvero una copertura minima e non una copertura minima, in questo caso è possibile un algoritmo polinomiale.
Parham,

Mmm, ho bisogno di una prova che a i minimi quadrati saranno posizionati razionalmente e avranno dimensioni razionali; o anche di più, che se l'input è di dimensione intera e posizionata in numero intero, anche i quadrati minimi saranno (per ridurlo a SAT). Intuitivamente, suppongo che sia vero, hai qualche idea per dimostrarlo?
Realz Slaw

@MahmoudAlimohamadi: puoi fornire i titoli / autori degli articoli in cui viene studiato (e risolto) il problema della piastrellatura di poligoni rettilinei (con o senza buchi) con quadrati.
Vor

2
a proposito, ho pensato che volevi dire minim um invece di minim al .
Realz Slaw,

Risposte:


15

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 :

inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine

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.

inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine

A sinistra un gadget 5X4 . Centro e destra: due possibili stati di partizione quadrata minima .

endpoint-gadget

TF

inserisci qui la descrizione dell'immagine

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:

  • 22
  • 3

Esempio:

inserisci qui la descrizione dell'immagine

72

Ecco come viene utilizzato:

inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine

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:

inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine

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¬BAB

Tuttavia, questo lascia il caso non vincolato:

inserisci qui la descrizione dell'immagine

Se combiniamo due i-fili , possiamo ottenere un'implicazione a due vie, essenzialmente un'uguaglianza booleana (in):

inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine

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 .

l12+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 :

inserisci qui la descrizione dell'immagine

Sopra: un filo .

inserisci qui la descrizione dell'immagine        inserisci qui la descrizione dell'immagine

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

inserisci qui la descrizione dell'immagine       inserisci qui la descrizione dell'immagine

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:

inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine

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:

inserisci qui la descrizione dell'immagine

di nome-valore-gate

Un gate con valore nominale è essenzialmente un endpoint come gate con un contatto a filo:

inserisci qui la descrizione dell'immagine

odd-skip-gate : dispari saltando un filo

A volte è scomodo avere solo fili di lunghezza dispari. Per esempio:

inserisci qui la descrizione dell'immagine

Come puoi vedere, quel po 'di estensione è un po' fastidioso. Ecco una soluzione corrispondente, usando il 4X3-gate :

inserisci qui la descrizione dell'immagine

Quindi, trasformandolo in un gate, otteniamo il dispari-skip-gate (in wireframe):

inserisci qui la descrizione dell'immagine

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:

inserisci qui la descrizione dell'immagine

Convinciti che funziona:

inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine

A

Il cancello può essere orientato secondo necessità.

split-gate : divisione di un filo

Dividere un filo, wireframe:

inserisci qui la descrizione dell'immagine

Convinciti che funziona:

inserisci qui la descrizione dell'immagine

A

inserisci qui la descrizione dell'immagine

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ì:

inserisci qui la descrizione dell'immagine

E una vista dei due possibili stati:

inserisci qui la descrizione dell'immagine         inserisci qui la descrizione dell'immagine

Il cancello può essere orientato secondo necessità.

clausola-gate

Per la clausola-gate , introduciamo innanzitutto il clausola-gadget :

inserisci qui la descrizione dell'immagine

3

Ecco come appare il cancello:

3

Spiegazione:

  1. Inizia dal gadget-clausola e segui le frecce.
  2. Le linee non a freccia indicano che fa parte di un circuito, ma non è forzato in uno stato dal gate.
  3. 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)=inCi,C={(xjxkxl)}

Un aiuto visivo (fonte originale: Terrain Guarding è NP-Hard (PDF) , riprodotto in tikz):

inserisci qui la descrizione dell'immagine

Poi:

  1. xixxi¬xi
  2. Collega le porte l'una all'altra con un non-gate , in modo che neghino logicamente i valori reciproci.
  3. Posiziona i poligoni delle 'porte' delle variabili nelle loro posizioni nell'incorporamento planare.
  4. Per ogni clausola, posiziona una porta- clausola nella posizione della clausola nell'incorporamento planare.
  5. Usando le porte sopra descritte, collega tutte le variabili alle loro clausole.
  6. Esegui un algoritmo di partizione quadrata minima sull'unione risultante di tutti i poligoni del gate (l'intero circuito).
  7. 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.


3
Wow, è assolutamente impressionante. Sfortunatamente, non sono abbastanza intelligente da controllare la riduzione, ma prendo la parola per questo :) Grazie!
Erel Segal-Halevi,

1
Quindi, la situazione nella piastrellatura è l'opposto della situazione nella copertura: nella copertura, la copertura quadrata è polinomiale e la copertura rettangolare è dura NP, mentre nella piastrellatura, la copertura quadrata è dura NP e la copertura rettangolare è polinomiale.
Erel Segal-Halevi,


8

NO(N3/2)

"Coprendo poligoni ortogonali con quadrati." LJ Aupperle e HE Conn e JM Keil e Joseph O'Rourke. Proc. 26 Allerton Conf. Commun. Comput controllo. , pp. 97-106, 1988. ( link per scaricare la scansione PDF )

Tuttavia, la copertura risultante può includere quadrati che si sovrappongono. Stai cercando una piastrellatura, in cui i quadrati non sono autorizzati a sovrapporsi, quindi il tuo problema non è esattamente lo stesso.


lol Ero a metà strada attraverso una formulazione :(. Molto interessante però! Benvenuti in cs.SE.
Realz Slaw

2
Se ho capito bene, questo documento permette ai quadrati di sovrapporsi (cioè è un problema di copertura). Sono interessato al caso in cui i quadrati non possono sovrapporsi (ovvero si tratta di un problema di partizionamento / piastrellatura).
Erel Segal-Halevi,

@ErelSegalHalevi: Oh, mi dispiace, non ho letto attentamente la tua domanda.
Joseph O'Rourke,

2
Oh, allora continuerò: D
Realz Slaw
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.