Diese Antwort besteht aus zwei Teilen, die zusammen zeigen, dass die korrekte Grenze :Θ(logN)
- Eine Untergrenze von (multipliziert mit dem Radius des ersten Kreises).Ω(logN)
- Eine übereinstimmende Obergrenze von .O(logN)
Untergrenze von Ω(logN)
Betrachten Sie zwei Einheitskreise, die sich an einem Punkt berühren . (Siehe unten; p ist rechts, der Fehler beginnt links.) Wechseln Sie zwischen einem Kreis und dem anderen. Der Käfer bewegt sich im Zick-Zack auf und ab über den Spalt zwischen den beiden Kreisen, bewegt sich hauptsächlich auf und ab, bewegt sich aber auch langsam nach rechts. Wenn ich die Trigonometrie korrekt durchgeführt habe, beträgt der Abstand vom gemeinsamen Punkt nach N Schritten Θ ( 1 / √ppNund derN-te Schritt veranlassen den Käfer,Θ(1/N)für eine Gesamtstrecke vonΘ(logN) zu gehen.Θ(1/N−−√)NΘ(1/N)Θ(logN)
Hier ist eine Skizze der Berechnungen. Betrachten Sie zwei aufeinanderfolgende Schritte, die der Fehler macht. Er geht von einem Punkt nach b nach c . Die Punkte a und c befinden sich auf demselben Kreis. Punkt b liegt auf dem anderen Kreis. Sei o der Mittelpunkt des Kreises, auf dem a liegt. Betrachten Sie die folgenden drei Dreiecke in abnehmender Reihenfolge:abcacboa
- Das Isozelen-Dreieck ( p ist der gemeinsame Punkt).△oapp
- Das Dreieck .△abp
- Das kleine Dreieck △abc
Diese Dreiecke sind fast ähnlich (dh kongruente Moduloskalierung). Genauer gesagt für haben alle drei die folgende Eigenschaft:
Das Verhältnis der Länge des kurzen zum langen Bein ist Θ ( ϵ ) . (Ich werde dies hier nicht detaillierter beweisen, aber beachten Sie, dass ϵ → 0,
wenn der Fehler auftritt, und indem Sie einen Scheitelpunkt in jedem Dreieck um einen vernachlässigbaren Betrag stören, können die Dreiecke ähnlich gemacht werden.)ϵ=|ap|Θ(ϵ)ϵ→0
Die langen Beine und p o des ersten Dreiecks haben die Länge 1. Ihr kurzes Bein | a p | hat die Länge ϵ . Segment a p ist ein langer Schenkel des zweiten Dreiecks, so dass der kurze Schenkel a b des Dreiecks die Länge Θ ( ϵ 2 ) hat . Segment a b ist ein langer Schenkel des dritten Dreiecks, so dass der kurze Schenkel a c des Dreiecks die Länge Θ ( ϵ 3 ) hat . In diesen beiden Schritten, die der Fehler ausführt, geschieht Folgendes:copo|ap|ϵapabΘ(ϵ2)abacΘ(ϵ3)
- Die Entfernung der Bug travels ist Θ ( ϵ 2 ) .|ab|+|bc|Θ(ϵ2)
- Der Abstand vom Käfer zum gemeinsamen Punkt nimmt von ϵ auf ϵ - Θ ( ϵ 3 ) ab .pϵϵ−Θ(ϵ3)
Zeit definieren ist die Anzahl der Schrittebevor ε t ≈ 1 / 2 k . Nach (2) oben nimmt ϵ nach etwa Θ ( 1 / ϵ 2 ) Schrittenum einen konstanten Faktor ab, so dass t k + 1 = t k + Θ ( 2 2 k ) = t k + Θ ( 4 k ) . Somit ist t k = Θ ( 4 ktkϵt≈1/2kϵΘ(1/ϵ2)tk+1=tk+Θ(22k)=tk+Θ(4k) . Das heißt, nach Θ ( 4 k ) Schritten, die Entfernung von dem Bug zu dem gemeinsamen Punkt P wird über seine 1 / 2 k . Wenn Sie die Variablen nach N Schritten ändern, ist der Abstand vom Käfer zum gemeinsamen Punkt ϵ = Θ ( 1 / √tk=Θ(4k)Θ(4k)p1/2kN. Und imN-ten Schritt wandert der Fehler zuΘ(ϵ2)=Θ(1/N). Soder Gesamtabstand in der ersten gereistNSchrittenΘ(1+1/2+1/3+...+1/N)=Θ(logN).ϵ=Θ(1/N−−√)NΘ(ϵ2)=Θ(1/N)NΘ(1+1/2+1/3+...+1/N)=Θ(logN)
Dies ist die Untergrenze.
Es erstreckt sich auf die vorgeschlagene Variante 2 (wie ich es verstehe) wie folgt:
Das Hinzufügen der Einschränkung, dass der Fehler zum nächsten Punkt im Schnittpunkt der beiden zuletzt platzierten Kreise verschoben werden soll, hilft nicht. Das heißt, die untere Grenze von gilt weiterhin. Um zu sehen, warum, werden wir das obige Beispiel ändern, indem wir einen einzelnen äußeren Kreis hinzufügen, der es dem Fehler ermöglicht, die Einschränkung zu erfüllen, während er immer noch denselben Pfad zurücklegt:Ω(logN)
Die grünen und blauen Kreise sind die beiden Kreise aus dem obigen Beispiel. Die Schnittpunkte und b sind die gleichen a und b wie im obigen Beispiel. Der rote Kreis ist der neue "fremde" Kreis. Die vorherige Sequenz wechselte zwischen den blauen und grünen Kreisen. Die neue Sequenz wird diese Sequenz sein, wobei jedoch der rote Kreis vor jedem Kreis in der alten Sequenz eingefügt wird: rot, blau, rot, grün, rot, blau, rot, grün, rot, blau, ...abab
Angenommen, der Käfer sitzt an Punkt, nachdem Blau gesetzt wurde. Der nächste platzierte Kreis ist rot. Rot enthält den Fehler, sodass sich der Fehler nicht bewegt. Der nächste platzierte Kreis ist grün. Jetzt bewegt sich der Bug zu b (das ist der nächstgelegene Punkt auf dem Schnittpunkt der grünen und roten Kreise). Durch Wiederholen dieses Vorgangs wird der Fehler wie zuvor behoben.ab
Obergrenze von O(logN)
Ich skizziere nur den Beweis.
Korrigieren Sie eine beliebige Folge von Kreisen. Wir werden argumentieren, dass als die Gesamtdistanz, die der Fehler in den ersten N Schritten zurückgelegt hat, O ( log N ) ist . Man gehe ohne Einschränkung der Allgemeinheit davon aus, dass der erste Kreis den Radius 1 hat.N→∞NO(logN)
Fix eine beliebig große . Sei p durch irgendeinen Punkt im Schnittpunkt der ersten N Kreise. Beachten Sie, dass aufgrund der Art und Weise, wie sich der Fehler bewegt, er sich in jedem Schritt, in dem sich der Fehler bewegt, p nähert .NpNp
Betrachten Sie zunächst Schritte, bei denen das folgende Verhältnis mindestens beträgt :
die Verringerung des Abstands zu p1/logN
Die in solchen Schritten zurückgelegte Gesamtdistanz istO(logN), da die in solchen Schritten zurückgelegte GesamtdistanzO(logN)multipliziert mit der Anfangsdistanz zup ist. Wir müssen also nur die in den anderen Schritten zurückgelegte Gesamtstrecke begrenzen - die, in denen dieses Verhältnis höchstens1/logNbeträgt.
the reduction in the distance to pthe distance traveled in the step.
O(logN)O(logN)p1/logN
Zunächst argumentieren wir etwas Schwächeres: Die in solchen Schritten zurückgelegte Gesamtstrecke,
bevor der Kreisradius auf 1/2 oder weniger abfällt, ist . (Wir zeigen später, dass dies ausreicht, um die Grenze zu geben.)O(logN)
Überlegen Sie sich einen solchen Schritt. Lassen und b jeweils bezeichnen die Orte des Fehlers vor und nach dem Schritt. Lassen Sie o bezeichnet den Mittelpunkt des aktuellen Kreises. Es sei b ' der Punkt auf dem Strahl → p b, so dass | p a | = | p b | :abob′pb→|pa|=|pb|
Betrachten Sie die folgenden Dreiecke:
- △opb
- △pba
- △abb′
Durch geometrische Argumente, die denen in der unteren Schranke ähnlich sind, hat für einige jedes dieser Dreiecke zwei lange Beine und ein kurzes Bein, und das Verhältnis (für jedes Dreieck) der kurzen Beinlänge zu den langen Beinlängen ist Θ ( ϵ) ) :
| b b ' |ϵΘ(ϵ)
|bb′||ab|=Θ(|ab||pa|)=Θ(|pa||bo|)=Θ(ϵ).
Diese Gleichung und die Annahme, dass , Die der Kreisradius ist, ist in [ 1 / 2 , 1 ] bedeuten , dass | a b | =|bo|[1/2,1] , und dann das | b b ' | = Θ ( | a b ||ab|=Θ(|pa|2/|bo|)=Θ(|pa|2) .|bb′|=Θ(|ab||pa|/|bo|)=Θ(|pa|3)
Jetzt konzentrieren wir uns auf den Abstand des Bugs zu . Nennenp vor dem Schritt und d ' nach dem Schritt. (Beachten Sie, dass d = | p a | , d ' = | p b | und d - d ' = | b b ' | .)dd′d=|pa|d′=|pb|d−d′=|bb′|
In diesem Schritt verringert sich dieser Abstand um | b b ' | , die nach den obigen Beobachtungen Ω ( d 3 ) ist .d|bb′|Ω(d3)
Somit beträgt die Anzahl der zusätzlichen Schritte, die erforderlich sind, um den Abstand um einen Faktor 2 (auf höchstens ) zu verringern, 0 ( 1 / d 2 ) . Ändern der Variablen, wenn d = 1 / 2 k , die Anzahl der zusätzlichen Schritte erforderlich , um den Abstand unter bringen
, 1 / 2 k + 1 ist O ( 4 k ) . Da die Summe geometrisch ist, benötigt die Gesamtanzahl der Schritte , um die Entfernung zu bringen , unter 1 / 2 k ist O (d/2O(1/d2)d=1/2k1/2k+1O(4k)1/2k . ÄndernVariablen wieder, nach n Schritten, die Entfernung zu p wird O ( 1 / √O(1/4k)np.O(1/n−−√)
Abschließend wird die angezeigte Gleichung im ten Schritt um mehrere Absätze nach oben verschoben, um die Entfernung, die der Fehler zurücklegt, dh um | a b | ist O ( ( der aktuelle Abstand zu p ) 2 ) = O ( 1 / n ) . Somit reist der Gesamtstrecke in den ersten N solche Schritte , während der Kreisradius in ist [ 1 / 2 , 1 ]
ist höchstens
N Σ n = 1 O ( 1 /n|ab|O((the current distance to p)2)=O(1/n)N[1/2,1]
∑n=1NO(1/n)=O(logN).
Durch Skalierung, schließen wir , dass, für jeden - Reisender die Gesamtstrecke , während der Kreisradius im Bereich [ 1 / 2 k , 1 / 2 k + 1 ]
ist O ( log ( N ) / 2 k ) . Summiert man über k , so ergibt sich eine Gesamtstrecke von O ( log N ) . QEDk[1/2k,1/2k+1]O(log(N)/2k)kO(logN)