Ich versuche das folgende Abdeckungsproblem zu lösen.
Es gibt Sender mit einer Reichweite von 1 km und Empfänger. Entscheiden Sie in dass alle Empfänger von einem Sender abgedeckt werden. Alle Empfänger und Sender werden durch ihre und Koordinaten dargestellt.
Die fortschrittlichste Lösung, mit der ich kommen kann, ist . Sortieren Sie für jeden Empfänger alle Sender nach der Entfernung zu diesem aktuellen Empfänger. Nehmen Sie dann den Sender mit der kürzesten Entfernung und diese kürzeste Entfernung sollte innerhalb von 0,5 km liegen.
Aber der naive Ansatz sieht in der Zeitkomplexität viel besser aus . Berechnen Sie einfach den gesamten Abstand zwischen allen Paaren von Sender und Empfänger.
Ich bin nicht sicher, ob ich bei diesem Problem Algorithmen für die Bereichssuche anwenden kann. Zum Beispiel erlauben uns kd-Bäume, solche Bereiche zu finden, aber ich habe nie ein Beispiel gesehen und bin mir nicht sicher, ob es eine Art von Bereichssuche für Kreise gibt.
Die gegebene Komplexität setzt voraus, dass die Lösung der Sortierung ähnlich sein sollte.
Antworten:
Sie können das Voronoi-Diagramm zusammen mit der Datenstruktur von Kirkpatrick verwenden, um dieses Problem zu lösen.
Wie Raphael und Syzygy vorgeschlagen haben, können Sie den Fortune-Algorithmus (Sweepline) verwenden , um das Voronoi-Diagramm zu erstellen. Zeit im schlimmsten Fall: .O(nlogn)
Das Voronoi-Diagramm enthält eine Reihe von Polygonen, die jeweils einen Sender enthalten. Jeder Punkt innerhalb des Polygons ist dem Sender am nächsten. Wenn Sie also herausfinden können, welches Polygon den Empfänger enthält, können Sie den nächstgelegenen Sender finden, indem Sie irgendwie herausfinden, in welchem Polygon es sich befindet. Danach prüfen Sie, ob sich dieser Sender innerhalb von .1 km
Um festzustellen, welches Voronoi-Polygon den Empfänger enthält, triangulieren Sie zunächst jedes Polygon im Diagramm. Jetzt haben Sie ein Dreiecksnetz. Als Nächstes verwenden Sie die Datenstruktur von Kirkpatrick, um ein beliebiges Dreieck zu lokalisieren, das einen bestimmten Punkt in der Zeit , im schlimmsten Fall. Der Aufbau der Kirkpatrick-Datenstruktur erfordert den ungünstigsten Fall O ( n log n ) . Sobald Sie das Dreieck kennen, kennen Sie das Polygon, das es enthält, und damit den nächsten Sender. Wenn Sie dies für alle Empfänger tun, ist dies im schlimmsten Fall O ( n log n ) .O(logn) O(nlogn) O(nlogn)
quelle