Sei ein vollständiger, gewichteter, ungerichteter Graph. Wir konstruieren einen zweiten Graphen G ' = ( V , E ' ), indem wir die Kanten einzeln von E nach E ' addieren . Wir addieren Θ ( | V | ) Kanten zu G ' insgesamt.
Jedes Mal , wenn wir einen Rand hinzuzufügen bis E ' , betrachten wir die kürzesten Abstände zwischen allen Paaren in ( V , E ' ) und ( V , E ' ∪ { ( u , v ) } ) . Wir zählen, wie viele dieser kürzesten Abstände sich infolge der Addition von ( u , v ) geändert haben . Sei C i die Anzahl der kürzesten Abstände, die sich ändern, wenn wir das i addierenth edge, und sei die Anzahl der Kanten, die wir insgesamt hinzufügen.
Wie groß ist ?
Da , ist auch C = O ( n 2 ) . Kann diese Grenze verbessert werden? Beachten Sie, dass ich C als Durchschnitt über alle Kanten definiere, die hinzugefügt wurden. Daher ist eine einzelne Runde, in der sich viele Abstände ändern, nicht so interessant, obwohl sich ergibt, dass C = Ω ( n ) .
Ich habe einen Algorithmus zur Berechnung eines geometrischen t-Schlüssel Gierig , dass die Arbeiten in Zeit, so dass , wenn C ist o ( n 2 ) , mein Algorithmus schneller als das Original Greedy - Algorithmus ist, und wenn C ist wirklich klein , möglicherweise schneller als der bekannteste Algorithmus (obwohl ich das bezweifle).
Einige problemspezifische Eigenschaften, die bei einer guten Bindung hilfreich sein können: Die hinzugefügte Kante hat immer eine größere Gewichtung als jede bereits im Diagramm enthaltene Kante (nicht unbedingt eine streng größere). Außerdem ist sein Gewicht kürzer als der kürzeste Weg zwischen u und v .
Sie können annehmen, dass die Eckpunkte Punkten in einer 2D-Ebene entsprechen und die Abstände zwischen den Eckpunkten die euklidischen Abstände zwischen diesen Punkten sind. Das heißt, jeder Scheitelpunkt entspricht einem Punkt ( x , y ) in der Ebene, und für eine Kante ( u , v ) = ( ( x 1 , y 1 ) , ( x 2 , y 2 ) ) ist sein Gewicht gleich zu √