貪欲なアルゴリズムはTathamの洪水を解決するでしょうか?

私はちょうど Simon Tathamのウェブサイトのパズルを調査していたところです洪水を見てみましょう。ここでは$ n times n $グリッドには、それぞれ$ k
$の所定の色で塗りつぶされたセルがあります(ゲームの指示を引用してください)。

色々な色で左上隅を繰り返し塗りつぶすことによって、グリッド全体が与えられた移動回数内で同じ色になるようにしてください。

     

四角形をクリックすると、左上隅にその四角形の色が塗りつぶされます。

これを行うための私の戦略は、単純な「貪欲なアルゴリズム」を使うことです。各段階で:

  • 左上隅から始まる単色のブロックを考えます。
  • このブロックに隣接する各色のセルの数を数えます(つまり、その色で塗りつぶすとブロックの一部になります)。
  • この番号が最大になるように色を選択し、その色で塗りつぶします。

たとえば、次のような位置にあるとします。

example

…洪水で青く塗りつぶすと4個の細胞が得られ、紫は5個、赤3個、黄色2個、橙色2個を得るので紫色を選択します。


このアルゴリズムは常に最適ですか? If so, は there a nice proof of
its optimality? If not, what the optimal algorithm for
making the whole grid monochromatic as fast as possible?

Dはclaimer: I don’t know the answer to thは
question. Also, I’m not completely confident that I’ve explained
the algorithm well enough – please leave a comment if it’s not
clear, and I’ll try to improve it.

ベストアンサー

間違いなく最適です!ここに反例があります:

enter image description here

白い部分から始める。
貪欲なアルゴリズムは、右上のすべての色を行います(5つの動き:黄色、緑色、濃い緑色、青色、濃い青色)、次に赤色(1)、そして他のすべての色(6つの動き)
12の動きの。

明らかにもっと効率的な方法があります:オレンジ、黄、緑、濃い緑、青、濃い青、赤、わずか7回の移動が必要です。

あまりにも多くの最適化がグリッド全体の評価に依存しているため、可能性のあるすべてのケースをバッシュアウトする幅広い最初の検索とは別に、洪水を解決する単純なアルゴリズムはないと思います。


編集:私は、それがプログラマー中心の用語であるように、幅広い最初の検索が何であるかを明確にすべきだと思います。

幅広い最初の検索は、次の方法で機能します。 – あなたのエリアを増やす色を試してみてください –
n回の移動後に可能なすべての状態を保存する – 厳密に非効率な状態を投棄する –
あなたが賢いプログラマーなら、いくつかの状態を捨てることができます:)。

n = 2の場合に格納される状態は、(Y、g)、(Y、O)、(Y、R)、(O、Y)、(O、R)、(R、O)、(R、Y)
エリア(Y、O)カバーは(O、Y)の厳密なサブセットであるため、削除することができます。 (O、R)と同じ(R、O)。
そこで、(Y、g)、(Y、R)、(O、Y)、(O、R)、(R、Y)
任意の巧妙なショートカットは、それを(R、Y)とトポロジカルに比較することによって(Y、R)を投げ捨てること、およびY、Rを有する任意の解をR、Yによってどのように叩くことができるかということである。それは自然に検索の後半に消えます。

したがって、幅広い最初の検索では、2つの移動の可能性のために(Y、g)、(O、Y)、(O、R)、(R、Y)

基本的に、最初のn回の移動でボードが1つの色に変わると、幅広い最初の検索が行われます。
ちょっとしたプログラミング知識があれば、洪水のようなゲームを「解決する」のが最も簡単な方法です。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です