Ich habe eine Menge von Punkten, die in einem metrischen Raum definiert sind - so kann ich einen 'Abstand' zwischen Punkten messen, aber sonst nichts. Ich möchte den zentralsten Punkt innerhalb dieser Menge finden, den ich als den Punkt mit der minimalen Summe der Abstände zu allen anderen Punkten definiere. Die Metrikberechnung ist langsam und muss daher nach Möglichkeit vermieden werden.
Der offensichtliche Weg, diesen Punkt zu finden, verwendet metrische Entfernungsberechnungen, da einfach (a) für jeden Punkt die Summe der Entfernungen zu allen anderen Punkten berechnet wird und dann (b) der minimale Punkt genommen wird.
Gibt es eine Möglichkeit, dies in weniger als Entfernungsvergleichen zu tun ? (Wahrscheinlich wird die Dreiecksungleichung in irgendeiner Weise ausgenutzt, was mit meiner Metrik übereinstimmen sollte.)
Eine gute Annäherung kann ausreichen, wenn keine genaue Methode existiert.
quelle
Antworten:
Nein, im schlimmsten Fall kann man es nicht besser machen als .Θ ( n2)
Stellen Sie sich eine Anordnung von Punkten vor, bei denen jedes Punktepaar einen Abstand von voneinander hat. (Dies ist eine mögliche Konfiguration.) Dann können Sie nichts Besseres tun, als jede Kante zu untersuchen. Insbesondere wenn es eine Kante gibt, die Sie nicht untersucht haben, kann ein Gegner die Länge dieser Kante entweder mit 0,9 , 1,0 oder 1,1 wählen . Alle diese Auswahlmöglichkeiten stimmen mit allen anderen Beobachtungen überein, die Sie gemacht haben, und mit den Anforderungen einer Metrik (z. B. mit der Dreiecksungleichung), sodass alle drei möglich sind. Sie erfordern jedoch unterschiedliche Ausgänge. Wenn Ihr Algorithmus diese Kante nicht untersucht und dann etwas ausgibt, kann ein Gegner immer eine Länge für die nicht untersuchte Kante auswählen, die die Ausgabe Ihres Algorithmus falsch macht.1 0,9 1.0 1.1
Wenn Sie jedoch wissen, dass alle Punkte in (obwohl Sie nicht ihre Koordinaten erhalten), kann das Problem durch Messen der O ( ( d + 1 ) n ) -Distanzen gelöst werden , wobei keine Entartungen (keine Teilmenge von) angenommen werden d + 1 Punkte sind koplanar).Rd O((d+1)n) d+1
Wählen Sie insbesondere Punkte zufällig aus. Dies sind Ankerpunkte. Aufgrund ihrer paarweisen Abstände können Sie Koordinaten für sie berechnen, die mit ihren paarweisen Abständen übereinstimmen. Berechnen Sie nun für jeden zweiten Punkt P den Abstand von P zu jedem der Ankerpunkte. Mithilfe der Triangulation und dieser Abstände können Sie die Position von P relativ zu den Ankerpunkten und damit die Koordinaten für P berechnen . Tun Sie dies für jeden Nicht-Ankerpunkt P.d+1 P P P P P . Jetzt haben Sie Koordinaten für jeden Punkt und können diese Koordinaten verwenden, um den Mittelpunkt zu finden, ohne das Orakel zu bitten, Ihnen weitere paarweise Abstände zu geben. Ich weiß nicht, ob dieser letzte Schritt schneller als die -Zeit ausgeführt werden kann , aber ohne weitere paarweise Abstände.O(n2)
quelle
Schauen Sie sich Piotr Indyks Arbeit an schnellen Algorithmen für metrische Räume an. ( Sublineare Algorithmen für metrische Raumprobleme , in Proceedings of STOC '99 , S. 428–434. ACM, 1999; PS ) Abschnitt 3 enthält einen linearen zeitlichen ungefähren 1-Median-Algorithmus.
quelle