Maximaler umschließender Kreis eines gegebenen Radius


19

Ich versuche, eine Lösung für das folgende Problem zu finden:

Bestimmen Sie anhand der Menge von Punkt und Radius den Mittelpunkt des Kreises, sodass der Kreis die maximale Anzahl von Punkten aus der Menge enthält. Die Laufzeit sollte .r O ( n 2 )SrO(n2)

Anfangs schien es sich um ein Problem zu handeln, das dem kleinsten umschließenden Kreis ähnelte und das leicht in gelöst werden kann . Die Idee war, ein willkürliches Zentrum zu setzen und alle Punkte von . Ersetzen Sie als Nächstes Schritt für Schritt den Kreis, um die Punkte ganz links / rechts zu berühren, und verkleinern Sie den Kreis auf den angegebenen Radius. Dies funktioniert offensichtlich nicht.SO(n2)S

Antworten:


7

Ich weiß nicht, wie ich dieses Problem in lösen soll , aber es gibt einen O ( n 2 log n ) -Algorithmus.O(n2)O(n2logn)

Lassen ist der Kreis , dessen Mittelpunkt s i die i -te Punkt mit dem Radius r . Es ist nicht schwer zu finden, dass der Punktsatz P = { p 0 , p 1 , , p m } von einem Kreis mit dem Radius r eingeschlossen werden kann, wenn der Schnittpunkt I ( P ) von C ( p 0 ) , C ( p 1) ist ) , C(si)siirP={p0,p1,,pm}rI(P) ist nicht leer. Wenn I ( P ) nicht leer ist, müssen außerdem einige Punkte in I ( P ) auf einem bd C ( p i ) (der Grenze von C ( p i ) ) liegen. Alsoversuchen wirfür jedes C ( s i ) und jeden Punkt p auf seiner Bindung herauszufinden, wie viele Kreise p enthalten. Die maximale Anzahl unter allen p ist die Antwort auf dieses Problem.C(p0),C(p1),,C(pm)I(P)I(P)bdC(pi)C(pi)C(si)ppp

Lassen Sie uns Punkte in . Es gibt eine Eins-zu-Eins-Abbildung zwischen den Punkten auf bd C ( s i ) und der reellen Zahl in [ 0 , 2 π ) . Für jeden Kreis C ( s j ) kann der Schnittpunkt zwischen C ( s j ) und bd C ( s i ) durch ein Intervall [ b e g i n j dargestellt werdenbdC(si)bdC(si)[0,2π)C(sj)C(sj)bdC(si) . Daher gibt es für alle Kreise außer C ( s i ) höchstens n - 1 Intervalle (einige Kreise schneiden sich möglicherweise nicht mit C ( s i ) ). Die maximale Anzahl kann leicht ermittelt werden, indem alle 2 ( n - 1 ) Endpunkte des Intervallssortiert, nacheinander gescannt und die aktuelle überlappende Anzahl gezählt werden. Für jedes C ( s i ) kann dieser Schritt in O ( n log n durchgeführt werden[beginj,endj]C(si)n1C(si)2(n1)C(si) Zeit, und es gibt n solche Kreise, so ist die Zeitkomplexität dieses Algorithmus O ( n 2 log n ) .O(nlogn)nO(n2logn)


2
Die Anordnung der Kreise kann in -Zeit (mit hoher Wahrscheinlichkeit) unter Verwendung eines standardmäßigen randomisierten inkrementellen Algorithmus konstruiert werden. Tatsächlich ist die Laufzeit O ( n log n + k ) , wobei k die Anzahl der Paare von Kreisen ist, die sich schneiden. Sehen Sie sich Ihr Lieblingslehrbuch für Computergeometrie an. O(n2)O(nLogn+k)k
JeffE

2

Ich denke, die schwierige Frage ist zu wissen, ob der Kreis, den Sie ausgewählt haben, tatsächlich "maximal" innerhalb der Menge ist. Die einzige Möglichkeit, dies festzustellen, besteht darin, alle möglichen Kombinationen der Punkte auszuprobieren und die Größe des Kreises zu testen, der sie einschließt.

Sie können den Suchraum jedoch verringern, indem Sie zuerst den Punktraum in ein Gitter aus quadratischen Zellen mit der Breite 2r unterteilen. Suchen Sie dann die Zelle mit der größten Dichte. Da Sie bereits einen Kreis mit X Punkten gefunden haben, können Sie daraus schließen, dass ein Kreis mit mehreren Punkten mindestens X Punkte enthalten muss. Und verwenden Sie dies als Ausgangspunkt, um die verschiedenen Kombinationen der Punkte zu testen.

Wenn Sie nur nach einer Reihe von Punkten suchen, die wahrscheinlich maximal sind, können Sie möglicherweise die Anzahl der zu testenden Kombinationen weiter reduzieren, indem Sie die Punkte auswählen, die in eine Nachbarschaft von Zellen fallen, in denen die Dichte der Nachbarschaft liegt ist größer als X.

Allerdings können beide "Verkleinerungen" fehlschlagen, und im schlimmsten Fall werden Sie Kreise für alle möglichen Punktekombinationen berechnen.


1

In Chazelle, B .; Lee, DTs Aufsatz Computing 36, 1-16 (1986), Satz 3 auf Seite 15, besagt, dass der Algorithmus zur Ermittlung des maximalen Einschlusskreises Zeitkosten kostet.O(n2)

Ich denke, der Schlüssel ist immer noch der Algorithmus zur Konstruktion von -Kreuzungsgraphen, den es früher erwähnt (oder siehe Edelsbrunner, H. (1987), Algorithmen in Combinatorial Geometry, Kapitel 7). Danach sollte die maximale Umschließungskreisfindung einfach sein.O(n2)

2n2O(n2lOG(n))

O(n2)O(n2)

V+E-F=2O(n2)


Wenn dies als Ergänzung zu der akzeptierten Antwort gelesen werden soll und nicht allein gelesen werden soll (was ich nicht weiß, da ich dieses Thema nicht kenne), sollten Sie es ausdrücklich erwähnen.
Babou
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.