Rechteckabdeckung durch Sweep Line

9

Ich bekomme eine Übung, die mir leider nicht gelungen ist.

Es gibt eine Reihe von Rechtecken und ein Rechteck R 0 . Bestimmen Sie mithilfe des Ebenen-Sweeping-Algorithmus, ob R 0 vollständig von der Menge von R 1 abgedeckt ist . . R n .R1..RnR0R0R1..Rn

Weitere Einzelheiten zum Prinzip der Sweep-Line-Algorithmen finden Sie hier .

Fangen wir von vorne an. Zunächst kennen wir den Sweep-Line-Algorithmus als den Algorithmus zum Auffinden von Liniensegmentkreuzungen, der zwei Datenstrukturen erfordert:

  • eine Menge von Ereignispunkten (es speichert Endpunkte von Segmenten und Schnittpunkten)Q
  • ein Status (dynamische Struktur für die Menge von Segmenten, die die Sweep-Linie schneidet)T

Die allgemeine Idee: Nehmen Sie an, dass die Sweep-Linie eine vertikale Linie ist, die sich der Menge der Rechtecke von links nähert. Sortieren Sie alle x- Koordinaten von Rechtecken und speichern Sie sie in aufsteigender Reihenfolge in Q - sollte O ( n log n ) annehmen . Beginnen Sie mit dem ersten Ereignispunkt. Bestimmen Sie für jeden Punkt die Menge der Rechtecke, die sich an einer bestimmten x- Koordinate schneiden , identifizieren Sie fortlaufende Segmente von Schnittrechtecken und prüfen Sie, ob sie R 0 an der aktuellen x- Koordinate vollständig abdecken . Mit T als Binärbaum wird O ( loglxQO(nlogn)xR0xT . Wenn ein Teil von R 0 unbedeckt bleibt, ist R 0 nicht vollständig abgedeckt.O(logn)R0R0

Details: Die Idee des Segmentschnittalgorithmus war, dass sich nur benachbarte Segmente schneiden. Basierend auf dieser Tatsache haben wir den Status und ihn während des gesamten Algorithmus beibehalten. Ich habe in diesem Fall versucht, eine ähnliche Idee zu finden, und bisher ohne Erfolg kann ich nur sagen, dass sich zwei Rechtecke schneiden, wenn sich ihre entsprechenden x- und y- Koordinaten überlappen.Txy

Das Problem ist, wie und gewartet wird und wie komplex das Erstellen und Verwalten von T ist. Ich gehe davon aus, dass R-Bäume in diesem Fall sehr nützlich sein können, aber wie ich festgestellt habe, ist es sehr schwierig, das minimale Begrenzungsrechteck mithilfe von R-Bäumen zu bestimmen.TT

Haben Sie eine Idee, wie Sie dieses Problem lösen und insbesondere wie Sie bauen können ?T

com
quelle
1
Sind diese achsenausgerichteten Rechtecke oder nicht? (Sie können es so oder so tun, aber es ist einfacher, wenn sie es sind.)
Louis
@ Louis, lassen Sie es uns ein wenig vereinfachen, nehmen wir an, es gibt achsenausgerichtete Rechtecke, aber natürlich ist der allgemeine Fall interessanter
com
Welche Punkte eines Rechtecks ​​sind Ereignispunkte? Alle Ecken, die obere linke ...?
Raphael
@ Raphael, nur x sind Ereignispunkte
com

Antworten:

6

nRii1

  • RiRi
  • RiRi

O(logn)

R0R0O(nlogn)O(n)

Für den allgemeinen Fall ist der offensichtliche Trick nicht ganz so schnell. Verwenden Sie den Standard-Sweep-Line-Algorithmus, um die gesamte durch die Rechtecke induzierte planare Unterteilung zu berechnen.

FR0R0O(1)O(n2logn)Ω(n2) In der Größe verwenden wir also im schlimmsten Fall so viel Speicherplatz. Die Zeit ist also "existenziell optimal", aber nicht "ausgangsempfindlich".

R0FRifRiffRiffRi

O(nlogn)O(n2logn)

Louis
quelle
QxTxiRRi,i1R0R0
RiRi