Partizionare un rettangolo senza danneggiare i rettangoli interni


12

C è un rettangolo parallelo all'asse.

C1,,Cn sono rettangoli coppia-interni-disgiunti assi-paralleli tali che , in questo modo:C1CnC

inserisci qui la descrizione dell'immagine

Una partizione C di conservazione del rettangoloC è una partizione C=E1EN , tale che Nn , Ei sono rettangoli asse-paralleli interni-disgiunti-coppia e per ogni i=1,,n : CiEi , ovvero ogni rettangolo esistente è contenuto in un nuovo rettangolo univoco, in questo modo:

inserisci qui la descrizione dell'immagine

Che cos'è un algoritmo per trovare una partizione che preserva il rettangolo con una piccola ?N

In particolare, esiste un algoritmo per trovare una partizione che preserva il rettangolo con parti ?N=O(n)

Risposte:


4

NUOVA RISPOSTA: il seguente semplice algoritmo è asintoticamente ottimale:

Allunga ciascuno dei rettangoli arbitrario, nella misura massima possibile in modo tale che i rettangoli rimangano accoppiati a coppie.Ci

Il numero di buche è al massimo . Questo è asintoticamente ottimale, poiché esistono configurazioni in cui il numero di fori è almeno .k2kO(k)

Le prove sono in questo documento .


VECCHIA RISPOSTA:

Il seguente algoritmo, sebbene non ottimale, è apparentemente sufficiente per trovare una partizione che preservi il rettangolo con parti .N=O(n)

L'algoritmo funziona con un poligono rettilinea , che viene inizializzata al rettangolo .PC

Fase 1: Scegli un rettangolo che è adiacente a un confine occidentale di (cioè, non c'è nessun altro rettangolo tra il lato occidentale di e un confine occidentale di ). Luogo all'interno di e si estendono fino a toccare il confine occidentale del . Sia (per ) la versione allungata di . Sia . Ripeti la Fase 1 volte fino a quando tuttoCiPCjCiPCiPPEii=1,,nCiP=PEinni rettangoli originali vengono posizionati e allungati. Nell'immagine seguente, un possibile ordine di posizionamento dei rettangoli è :C1,C2,C4,C3

inserisci qui la descrizione dell'immagine

Ora, è un poligono rettilineo (possibilmente disconnesso), in questo modo:P

inserisci qui la descrizione dell'immagine

Sostengo che il numero di vertici concavi in sia al massimo . Questo perché, ogni volta che un rettangolo allungato viene rimosso da , ci sono 3 possibilità:P2nP

  • Vengono aggiunti 2 nuovi vertici concavi (come quando si posizionano );C1,C4
  • Vengono aggiunti 3 nuovi vertici concavi e 1 viene rimosso (come con );C3
  • Vengono aggiunti 4 nuovi vertici concavi e 2 rimossi (come con ).C2

Fase 2: partizione in rettangoli asse-parallelo usando un algoritmo esistente (vedere Keil 2000, pagine 10-13 e Eppstein 2009, pagine 3-5 per una revisione).P

Keil cita un teorema che dice che il numero di rettangoli in una partizione minima è limitato da 1 + il numero di vertici concavi. Pertanto, nel nostro caso il numero è al massimo e il numero totale di rettangoli nella partizione è .2n+1N3n+1


Questo algoritmo non è ottimale. Ad esempio, nell'esempio precedente fornisce mentre la soluzione ottimale ha . Quindi rimangono due domande:N=13N=5

A. Questo algoritmo è corretto?

B. Esiste un algoritmo a tempo polinomiale per trovare la ottimale , o almeno una migliore approssimazione?N


Bene, nella fase 1, aggiungi celle di partizione, ognuna delle quali contiene esattamente un rettangolo iniziale e non si sovrappone a un altro. Nella fase 2, si suddivide lo spazio rimanente, quindi le celle create nella fase 2 non intersecano nessuno del rettangolo iniziale. La prova della correttezza sembra piuttosto semplice o mi sono perso qualcosa?
Bosone,

@Il punto su cui non sono sicuro è che il numero di vertici concavi è al massimo di . Sembra "ovvio" che ci sono solo 3 possibilità come ho scritto, ma potrei aver perso qualche altra possibilità. 2n
Erel Segal-Halevi,
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.