Angenommen, wir haben eine endliche Menge von Platten in und möchten die kleinste Platte berechnen, für die . Ein Standard - Weg , dies zu tun , ist der Algorithmus von Matoušek, Sharir und Welzl [1] zu verwenden , um eine Basis zu finden von , und lassen , die kleinste Platte enthält . Die Scheibe kann algebraisch unter Verwendung der Tatsache berechnet werden , dass, da eine Basis ist, wobei jede Scheibe in tangential zu .
( ist eine Basis von , wenn minimal ist , so dass Eine Basis hat höchstens drei Elemente,. Im allgemeinen für die Kugeln in eine Basis hat höchstens . Elemente)
Es ist ein randomisierter rekursiver Algorithmus wie folgt. (Nachfolgend finden Sie eine iterative Version, die möglicherweise leichter zu verstehen ist.)
Verfahren :
Eingabe : Finite Sätze von Scheiben , , wobei eine Basis (von ist ).
- Wenn , geben Sie .
- Andernfalls wählen Sie zufällig.
- Lassen .
- Wenn dann zurück .
- Andernfalls zurückkehren , in denen B " eine Basis ist , B ' ∪ { X } .
Wird als eine Basis zu berechnen L .
Vor kurzem hatte ich Grund, diesen Algorithmus zu implementieren. Nachdem ich in Millionen zufällig generierten Testfällen die Richtigkeit der Ergebnisse überprüft hatte, stellte ich fest, dass ich einen Fehler in der Implementierung gemacht hatte. Im letzten Schritt habe ich und nicht M S W ( L , B " ) zurückgegeben .
Trotz dieses Fehlers gab der Algorithmus die richtigen Antworten.
Meine Frage: Warum gibt diese falsche Version des Algorithmus anscheinend hier richtige Antworten? Funktioniert es immer (nachweislich)? Wenn ja, gilt das auch für höhere Dimensionen?
Hinzugefügt: einige Missverständnisse
Einige Leute haben falsche Argumente vorgeschlagen, um den modifizierten Algorithmus für trivial korrekt zu halten. Daher kann es nützlich sein, hier einige Missverständnisse zu vermeiden. Ein populärer falscher Glaube scheint zu sein , dass . Hier ist ein Gegenbeispiel zu dieser Behauptung. Gegeben Scheiben ein , b , c , d , e , wie nachstehend (die Grenze des ⟨ a , b , e ⟩ wird auch in rot dargestellt):
wir können ; und beachten Sie, dass e ∉ ⟨ c , d ⟩ :
So kann es passieren. Die erste Beobachtung ist , daß :
- Wir wünschen berechnen
- Wähle
- Sei
- Beachten Sie, dass
- So lassen eine Basis von B ' ∪ { X } = { a , b , c , e }
- Beachten Sie, dass
- Gib , das ist { b , c }
Betrachten wir nun .
- Wir wollen M S W berechnen ( { c , d } , { a , b , e } )
- Wähle
- Lassen
- Beachten Sie, dass
- Sei also eine Basis von B ' ∪ { X } = { b , c , d }
- Beachten Sie, dass
- Gib , das ist { c , d }
(Nehmen wir der Bestimmtheit halber an, die Scheiben alle den Radius 2 und sind zentriert bei ( 30 , 5 ) , ( 30 , 35 ) , ( 10 , 5 ) , ( 60 , 26 ) bzw. ( 5 , 26 ) .)
Hinzugefügt: eine iterative Präsentation
Es kann einfacher sein, über eine iterative Darstellung des Algorithmus nachzudenken. Ich finde es auf jeden Fall einfacher, sein Verhalten zu visualisieren.
Eingabe : Eine Liste von Platten Ausgabe : Eine Basis von L
- Sei .
- Mische zufällig.
- Für jedes in L :
- Wenn :
- Sei eine Basis von B ∪ { X } .
- Fahren Sie mit Schritt 2 fort.
- Return .
Der Grund der Algorithmus endet, nebenbei bemerkt, ist , dass Schritt 5 immer den Radius erhöht - und es gibt nur endlich viele mögliche Werte von B .
Die modifizierte Version hat meines Erachtens keine so einfache iterative Darstellung. (Ich habe versucht, in der vorherigen Bearbeitung einen zu diesem Beitrag hinzuzufügen, aber er war falsch - und habe falsche Ergebnisse geliefert.)
Referenz
[1] Jiří Matoušek, Micha Sharir und Emo Welzl. Eine subexponentielle Grenze für die lineare Programmierung. Algorithmica, 16 (4-5): 498–516, 1996.