Gierige Strategie zur Berechnung der Mindestanzahl von Strahlen, die alle Ballons treffen

7

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 SatzC von n Kreise in der Ebene, jeweils angegeben durch ihren Radius und die (x,y) Berechnen Sie die minimale Anzahl von Strahlen vom Ursprung, die jeden Kreis in schneiden C. 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)

9ballons-4rays

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 Ssei die Menge der Strahlen, die von unserem gierigen Algorithmus geschossen werden. LassenS sei der Satz von Strahlen, die von einer anderen optimalen Lösung aufgenommen werden.

Unser Basisfall ist wann n=1. 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 n Objekte.

Wir behaupten nun, dass der erste Strahl von α von S kann nicht schlimmer machen als das von S.

Betrachten wir nun eine n+1Objektsituation. Dann sortieren wirS und S gemäß αim Uhrzeigersinn. Untersuchen wir nun den ersten Strahl, der von auftrittαim Uhrzeigersinn. ImS, dieser erste Strahl, nenne es R, kann unmöglich schlimmer machen als das von S, nennen R, weil unser gieriger Algorithmus besagt, dass dieser Strahl die meisten Objekte schneidet, einschließlich des ersten von α. Deshalb,R schneidet entweder genauso viele oder weniger Objekte als R. Somit können wir ersetzenR mit R in der optimalen Lösung S.

Jetzt müssen wir herausfinden, ob der Rest von S ist optimal, ausschneiden R, die wir anrufen werden T. Da gibt es jetzt aber höchstensn Objekte, sagt unsere Induktionshypothese, dass unser gieriger Algorithmus eine optimale Lösung für findet T. Als solches ist dieR+TProblem hat eine optimale Lösung von unserem gierigen Algorithmus. QED

Pinoyboy
quelle
"Unser gieriger Algorithmus sagt, dass dieser Strahl die meisten Objekte schneiden wird." Ich sehe nicht, wie diese Aussage gerechtfertigt ist. Die meisten Objekte aus welchen möglichen Richtungen?
JWG

Antworten:

1

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.

Q1: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?

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.

Q2: Was ist der Sinn der Tatsache, dass es einen Strahl gibt, der keine Ballons schneidet?

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:

  • Finden Sie zuerst die Richtung / den Winkel α entlang derer ein Strahl keine Ballons schneidet;
  • Identifizieren Sie dann den ersten Ballon (z. B. im Uhrzeigersinn). b in Bezug auf diese Richtung / Winkel α;; Hierb ist definiert als der erste Ballon, den Sie verlassen, wenn Sie eine Linie ausgehend von der Richtung / dem Winkel fegen α im Uhrzeigersinn.
  • schieße einen Strahl, der ist bTangentenlinie ganz rechts (im Uhrzeigersinn) l, Fernbedienung aller von getroffenen Ballons l,
  • und dann wiederkehren.

Q3: Soll ich beweisen, dass eine optimale Lösung diese Tatsache nutzt?

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 einenlognAlgorithmus. Gut,nlgnbedeutet 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.

Hengxin
quelle
Danke für die Antwort! Für mich wird es jetzt klarer. Jetzt muss ich jedoch eine grundlegende Idee herausfinden, wie dieser Algorithmus O (n log n) gemacht werden kann. Würdest du zufällig irgendwelche Anfangsgedanken haben? Danke noch einmal!
Pinoyboy
@ Pinoyboy nlogn? Nun, es bedeutet oft, dass Sie zuerst einige Dinge sortieren können. Sortieren Sie möglicherweise alle Luftballons nach den Winkeln ihrer rechten (wieder im Uhrzeigersinn) Verwicklungslinien. Dann ist es einfach, die gierige Strategie anzuwenden.
Hengxin
Ahhh, das macht Sinn! Es tut mir so leid, dass ich so viele Fragen gestellt habe. Aber jetzt macht es für mich sehr viel Sinn!
Pinoyboy
@pinoyboy Gerne helfen. Beachten Sie, dass ich es nicht offiziell bewiesen habe. Du solltest es versuchen. Der Versuch, eine gierige Strategie zu beweisen, ist eine gute Chance zu lernen.
Hengxin
1
Wie würden Sie mit dem Fall umgehen, in dem es anfangs keine Richtung gibt, in der ein Strahl keinen Ballon schneidet? Das Starten eines Algorithmus aus einem beliebigen Blickwinkel scheint in diesem Fall nicht zu einer optimalen Lösung zu führen ...
Maxim Mikhaylov