Ein Rechteck partitionieren, ohne innere Rechtecke zu beschädigen

12

C ist ein achsparalleles Rechteck.

C1,,Cn sind achsparallele Rechtecke die paarweise im Inneren getrennt sind, so dass wie :C1CnC

Bildbeschreibung hier eingeben

Eine rechteckerhaltende Partition von C ist eine Partition C=E1EN , so dass Nn , die Eich achsparallele Rechtecke sind, und für jedes ich=1,,n : CichEich , dh jedes vorhandene Rechteck ist in einem eindeutigen neuen Rechteck enthalten, wie folgt:

Bildbeschreibung hier eingeben

Was ist ein Algorithmus zum Auffinden einer rechteckbewahrenden Partition mit einem kleinen ?N

Gibt es insbesondere einen Algorithmus zum Auffinden einer rechteckerhaltenden Partition mit Teilen?N=Ö(n)

Erel Segal-Halevi
quelle

Antworten:

4

NEUE ANTWORT: Der folgende einfache Algorithmus ist asymptotisch optimal:

Dehnen Sie jedes der Rechtecke beliebig, so dass die Rechtecke paarweise disjunkt bleiben.Cich

Die Anzahl der Löcher beträgt höchstens . Dies ist asymptotisch optimal, da es Konfigurationen gibt, bei denen die Anzahl der Löcher mindestens beträgt .k-2k-Ö(k)

Die Beweise sind in diesem Papier .


ALTE ANTWORT:

Der folgende Algorithmus ist zwar nicht optimal, aber anscheinend ausreichend, um eine rechteckerhaltende Partition mit Teilen zu finden.N=Ö(n)

Der Algorithmus arbeitet mit einem geradlinigen Polygon , das auf das Rechteck initialisiert wird .PC

Phase 1: Wähle ein Rechteck das an eine Westgrenze von angrenzt (dh es gibt kein anderes Rechteck zwischen der Westseite von und einer Westgrenze von ). Platziere in und dehne es, bis es die westliche Grenze von berührt . Sei (für ) die gedehnte Version von . Sei . Wiederholen Sie Phase 1 mal, bis alleCichPCjCichPCichPPEichich=1,,nCichP=PEichnnC 1 , C 2 , C 4 , C 3Die ursprünglichen Rechtecke werden platziert und gedehnt. In der folgenden Abbildung ist eine mögliche Reihenfolge für das Platzieren der Rechtecke :C1,C2,C4,C3

Bildbeschreibung hier eingeben

Nun ist ein geradliniges Polygon (möglicherweise nicht verbunden), wie folgt:P

Bildbeschreibung hier eingeben

Ich behaupte, dass die Anzahl der konkaven Ecken in höchstens . Dies liegt daran, dass es drei Möglichkeiten gibt , wenn ein gestrecktes Rechteck aus entfernt wird :P2nP

  • 2 neue konkave Eckpunkte werden hinzugefügt (wie beim Platzieren von );C1,C4
  • 3 neue konkave Eckpunkte werden hinzugefügt und 1 wird entfernt (wie bei );C3
  • Es werden 4 neue konkave Eckpunkte hinzugefügt und 2 entfernt (wie bei ).C2

Phase 2: Partitionieren von in achsparallele Rechtecke unter Verwendung eines vorhandenen Algorithmus ( eine Übersicht finden Sie in Keil 2000, Seite 10-13 und Eppstein 2009, Seite 3-5 ).P

Keil zitiert einen Satz, der besagt, dass die Anzahl der Rechtecke in einer minimalen Partition durch 1 + die Anzahl der konkaven Scheitelpunkte begrenzt ist. In unserem Fall beträgt die Anzahl daher höchstens , und die Gesamtzahl der Rechtecke in der Partition beträgt .2n+1N3n+1


Dieser Algorithmus ist nicht optimal. Im obigen Beispiel ist beispielsweise während die optimale Lösung . Es bleiben also zwei Fragen:N=13N=5

A. Ist dieser Algorithmus korrekt?

B. Gibt es einen Polynom-Zeit-Algorithmus, um das optimale , oder zumindest eine bessere Näherung?N

Erel Segal-Halevi
quelle
Nun, in Phase 1 fügen Sie Partitionszellen hinzu, von denen jede genau ein anfängliches Rechteck enthält und sich nicht mit einem anderen überlappt. In Phase 2 partitionieren Sie den verbleibenden Speicherplatz, sodass die in Phase 2 erstellten Zellen keines der ursprünglichen Rechtecke schneiden. Der Beweis der Richtigkeit scheint ziemlich einfach zu sein, oder habe ich etwas verpasst?
Boson
@ Boson Der Punkt, bei dem ich nicht sicher bin, ist, dass die Anzahl der konkaven Eckpunkte höchstens . Es scheint "offensichtlich", dass es, wie ich schrieb, nur drei Möglichkeiten gibt, aber ich habe vielleicht eine andere Möglichkeit verpasst. 2n
Erel Segal-Halevi