Das minimale Zap-Problem unten ist Übung 11 in Jeff Ericksons Vortrag über "Greedy Algorithm" .
Das minimale Zap-Problem kann formeller wie folgt angegeben werden. Gegeben ein Satz von Kreise in der Ebene, jeweils angegeben durch ihren Radius und die Berechnen Sie die minimale Anzahl von Strahlen vom Ursprung, die jeden Kreis in schneiden . Ihr Ziel ist es, einen effizienten Algorithmus für dieses Problem zu finden. (Siehe ein Beispiel "9-Ballons mit 4 Strahlen" in der folgenden Abbildung)
Frage: Angenommen, es ist möglich, einen Strahl zu schießen, der keine Ballons schneidet. Beschreiben und analysieren Sie einen gierigen Algorithmus, der das Minimum-Zap-Problem in diesem speziellen Fall löst.
Ich habe Probleme, mich diesem Problem zu nähern. Ich dachte, ein gieriger Ansatz wäre es, den Strahl zu verwenden, der die meisten Kreise schneidet und wiederkehrt, aber mir wurde gesagt, dass dies falsch sei. Warum ist das?
Und wozu dient ein Strahl, der keine Luftballons schneidet? Soll ich beweisen, dass eine optimale Lösung diese Tatsache nutzt?
Jede Hilfe wäre dankbar! Ich habe erst kürzlich angefangen, Algorithmen zu lernen :)
Algorithmus basierend auf der Antwort von hengxin: https://cs.stackexchange.com/a/52293/42816
Beweis durch mathematische Induktion
Hinweis: Die Implementierung von O (n log n) wurde nicht verwendet
Nun werden wir die Richtigkeit dieses Algorithmus durch mathematische Induktion beweisen. Wir werden zeigen, dass unser gieriger Algorithmus nicht schlechter abschneiden kann als die optimale Lösung.
Lassen sei die Menge der Strahlen, die von unserem gierigen Algorithmus geschossen werden. Lassen sei der Satz von Strahlen, die von einer anderen optimalen Lösung aufgenommen werden.
Unser Basisfall ist wann . Es gibt nur ein Objekt zu zerstören, und unser gieriger Algorithmus verwendet 1 Strahl, was ebenfalls optimal ist. Das checkt also aus.
Für unsere Induktionshypothese gehen wir nun davon aus, dass unser Greedy-Algorithmus für bis zu optimal ist Objekte.
Wir behaupten nun, dass der erste Strahl von von kann nicht schlimmer machen als das von .
Betrachten wir nun eine Objektsituation. Dann sortieren wir und gemäß im Uhrzeigersinn. Untersuchen wir nun den ersten Strahl, der von auftrittim Uhrzeigersinn. Im, dieser erste Strahl, nenne es , kann unmöglich schlimmer machen als das von , nennen , weil unser gieriger Algorithmus besagt, dass dieser Strahl die meisten Objekte schneidet, einschließlich des ersten von . Deshalb, schneidet entweder genauso viele oder weniger Objekte als . Somit können wir ersetzen mit in der optimalen Lösung .
Jetzt müssen wir herausfinden, ob der Rest von ist optimal, ausschneiden , die wir anrufen werden . Da gibt es jetzt aber höchstens Objekte, sagt unsere Induktionshypothese, dass unser gieriger Algorithmus eine optimale Lösung für findet . Als solches ist dieProblem hat eine optimale Lösung von unserem gierigen Algorithmus. QED
quelle
Antworten:
Prinzip: Sie müssen die Strahlen in einer bestimmten Reihenfolge aufnehmen und sorgfältig die richtige Richtung / den richtigen Winkel für den ersten Strahl auswählen.
Siehe die Abbildung im Problem. Angenommen, es gibt nur 4 Luftballons: die beiden grünen und die beiden blauen. Wenn Sie Ihren ersten Strahl entlang der x-Achse schießen (dies ist nach Ihrer gierigen Strategie zulässig. Beachten Sie, dass die drei größeren Ballons nicht von einem einzigen Strahl getroffen werden können; andernfalls bewegen Sie sie leicht herum), lassen Sie die beiden andere Ballons weit voneinander entfernt. Infolgedessen kostet es Sie 3 Strahlen, aber das Optimum ist 2.
Der entscheidende Punkt ist also, den ersten Strahl in die richtige Richtung zu schießen. Hier kommt die Tatsache, dass "es einen Strahl gibt, der keine Ballons schneidet".
Die Grundidee lautet wie folgt:
Es ist nicht leicht zu beweisen, dass eine gierige Strategie richtig ist. Sie können versuchen, die obige Idee zu beweisen, indem Sie eine mathematische Induktion anwenden und Argumente austauschen ( oder vielleicht zeigen, dass sie falsch ist! ). Ein Hinweis ist, die Menge der von einem beliebigen Algorithmus aufgenommenen Strahlen zu betrachten und sie nach Winkeln in Bezug auf zu sortierenα (im Uhrzeigersinn), dann vergleichen Sie es nacheinander mit der optimalen Lösung.
Implementierung: In den Kommentaren bittet OP um einenlogn Algorithmus. Gut,nlgn bedeutet oft, dass Sie einige Dinge zuerst sortieren können. Sortieren Sie möglicherweise alle Luftballons nach den Winkeln ihrer rechten (wieder im Uhrzeigersinn) Verwicklungslinien. Dann ist es einfach, die oben genannte gierige Strategie anzuwenden. Das ist eine grobe Idee. Wie man es effizient umsetzt, indem man gute Datenstrukturen auswählt / entwirft, bleibt eine Übung.
quelle