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 .k−2k−O(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=P∖Einni rettangoli originali vengono posizionati e allungati. Nell'immagine seguente, un possibile ordine di posizionamento dei rettangoli è :C1,C2,C4,C3
Ora, è un poligono rettilineo (possibilmente disconnesso), in questo modo:P
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+1N≤3n+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