すべてのバルーンに当たる光線の最小数を計算するための貪欲な戦略


7

以下の最小ザップ問題、「Greedy Algorithm」に関するJeff Ericksonの講義の演習11 です。

最小ザップ問題は、次のようにより正式に述べることができます。セットを考えるC 平面内の円。それぞれが半径と (x,y) 中心の座標。すべての円と交差する原点からの光線の最小数を計算します C。あなたの目標は、この問題の効率的なアルゴリズムを見つけることです。(下図の「9-balloons-with-4-rays」の例を参照してください)

9balloons-4rays

質問:風船と交差しない光線を発射することが可能だとします。この特別な場合の最小ザップ問題を解決する貪欲なアルゴリズムを説明および分析します。


この問題への取り組みに問題があります。貪欲なアプローチは、ほとんどの円と交差して再帰する光線を使用することだと思いましたが、これは間違っていると言われました。どうしてこれなの?

そして、風船と交差しない光線があるという事実の意味は何ですか?いくつかの最適なソリューションがこの事実を使用していることを証明するはずですか?

どんな助けもいただければ幸いです!私は最近アルゴリズムを学び始めました:)


hengxinの回答に基づくアルゴリズム:https ://cs.stackexchange.com/a/52293/42816

数学的帰納法による証明

注:O(n log n)実装を使用しませんでした

次に、数学的帰納法を使用して、このアルゴリズムの正確性を証明します。私たちの貪欲なアルゴリズムは最適解よりも悪いことはできないことを示します。

しましょう S私たちの貪欲なアルゴリズムによって発射された光線のセットになります。しましょうS 別の最適なソリューションによって撮影された光線のセットである。

私たちの基本ケースはいつですか n=1。破壊するオブジェクトは1つだけであり、貪欲なアルゴリズムは1つのレイを使用しますが、これもたまたま最適です。これはチェックアウトです。

ここで、帰納法の仮説について、貪欲なアルゴリズムが最大で n オブジェクト。

ここで、最初の光線が αS それよりも悪いことはできません S

今考えてみましょう n+1オブジェクトの状況。次に、並べ替えますS そして S による α、時計回り。今から発生する最初の光線を調べてみましょうα時計回り。にS、この最初の光線、それを呼び出します R、おそらくそれよりも悪いことはできません S、 あれを呼べ R、私たちの貪欲なアルゴリズムは、この光線が最初のオブジェクトを含むほとんどのオブジェクトと交差することを示しているため、 α。したがって、R 交差するオブジェクトの数と同じかそれより少ないオブジェクト R。したがって、RR 最適なソリューションで S

さて、残りの部分が S 最適です、カットアウト R、これを呼び出します T。ただし、現在は最大でn オブジェクト、私たちの帰納仮説は、貪欲なアルゴリズムが T。そのため、R+T問題には、貪欲なアルゴリズムによる最適な解があります。QED


「私たちの貪欲なアルゴリズムは、この光線はほとんどのオブジェクトと交差すると言っています」私はこのステートメントがどのように正当化されるかわかりません。可能な方向のセットのほとんどのオブジェクト?
jwg

回答:


1

原則:光線を一定の順序で撮影し、最初の光線の適切な方向/角度を慎重に選択する必要があります。

Q1貪欲なアプローチは、ほとんどの円と交差して再帰する光線を使用することだと思いましたが、これは間違っていると言われました。どうしてこれなの?

問題の図を参照してください。バルーンが4つしかないと仮定します。2つは緑のバルーン、2つは青いバルーンです。最初の光線をX軸に沿って発射する場合(これは貪欲な戦略で許可されています。3つの大きな風船は1つの光線に当たらないと思います。それ以外の場合は、少し動かしてください)、2つ離れます。他の風船は遠く離れています。その結果、3つの光線がかかりますが、最適な光線は2つです。

Q2 風船と交差しない光線があるという事実のポイントは何ですか?

したがって、重要な点は、正しい方向に沿って最初の光線を発射することです。「風船と交差しない光線がある」という事実があります。

基本的な考え方は次のとおりです。

  • 最初に方向/角度を見つける α それに沿って光線が風船と交差しない。
  • 次に、最初のバルーンを特定します(たとえば、時計回り) b この方向/角度に関して α; ここにb 方向/角度から開始して線をスイープしたときに最初に離れるバルーンとして定義されます α 時計回り。
  • ある光線を放つ bの右端(時計回り)の接線 l、ヒットしたすべての風船をリモート l
  • そして再帰。

Q いくつかの最適なソリューションがこの事実を使用していることを証明するはずですか?

貪欲な戦略が正しいことを証明することは容易ではありません。数学的帰納法を適用して引数を交換することで、上記のアイデアを証明することができます(または、おそらくそれが間違っていることを示すことができます!)。ヒントは、任意のアルゴリズムによって発射された光線のセットを考慮し、それらを次の角度でソートすることです。α (時計回り)、それを1つずつ最適解と比較します。


実装:コメントで、OPはログアルゴリズム。上手、lg多くの場合、最初にいくつかのものを並べ替えることができます。おそらく、すべての気球を右(再び時計回り)のもつれ線の角度で並べ替えます。次に、上記の貪欲な戦略を適用するのは簡単です。これは大雑把な考えです。優れたデータ構造を選択/設計して効率的に実装する方法は、演習として残しておきます。


答えてくれてありがとう!今、私にはより明確になり始めています。しかし今、私はこのアルゴリズムをO(n log n)にする方法の基本的な考え方を理解する必要があります。何か最初の考えはありますか?再度、感謝します!
pinoyboy 2016年

あずきっく ログ?まあ、それはしばしばあなたが最初にいくつかのものを分類できることを意味します。おそらく、すべての気球を右(再び時計回り)のもつれ線の角度で並べ替えます。次に、貪欲な戦略を適用するのは簡単です。
hengxin

ああ、それは理にかなっています!多くの質問をしてごめんなさい。しかし、それは今私に多くの意味をなしています!
pinoyboy 2016年

@pinoyboy助けてくれてうれしい。私はそれを正式に証明しなかったことに注意してください。試してみてください。貪欲な戦略を証明しようとすることは、学ぶ良い機会です。
hengxin

1
光線がバルーンと交差しない最初の方向がない場合はどのように処理しますか?この場合、任意の角度からアルゴリズムを開始しても、最適な解決策にはならないようです...
Maxim Mikhaylov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.