2017-11-14 18 views
3

私は解決するために、この問題を持っている:三角形アルゴリズム

入力は、例えば、数及び三角形である:

5 
#-##----# 
-----#- 
    ---#- 
    -#- 
    - 

数は三角形の行数です。

そして、最大の「三角形領域」 - -で作られた最大の三角形を印刷する必要があります。このため

4 
#-#-#-- 
#---# 
    ##- 
    - 

は、出力は私がアルゴリズムでいくつかの助けが必要4.

です:この1のための答えは、三角形はまた、逆さまにすることができ9.

です。アルゴリズム全体ではなく、ちょっとした助けてください。私はそれを自分で解決しようとしているので、方向性が必要です。

+1

問題を解決するためにこれまで行ってきた作業の概要と、問題解決のための難しさの説明([help]、[ask ])。 – Zabuza

+0

申し訳ありませんが、私は宿題を求めていませんでしたので、私はそれを知らなかったのです。 – MichalH

+0

あなたのアイデアを私たちに伝えれば大丈夫です。しかし、あなたはヒントを求めているだけで、完全な解決策ではないので、それは問題ないと思います。 – Zabuza

答えて

2

ヒント

私はすべての三角形の形式であることを前提としています好き

--- 
- 

とされていない:

- or - or - 
---  --  -- 
      -   - 

備考2単位の三角形はで構成されていること3つの1単位三角形。 3単位の三角形は、3つの重なり合う2単位の三角形などで構成されます。完全なアルゴリズムは、以下ドン」

次の図は、3つの2台の三角形で構成された3単位の三角形の一例であり、それ自体が3つの1単位三角形

- -+ -+* +* *   --- +++ *** 
    - + *  ==>  - + * 
     o      o 

スポイラーからなりますtは

することができます

/!\ spoiler alert /!\ 

/!\ spoiler alert /!\ 

/!\ spoiler alert /!\ 

メインアルゴリズムそれを読みますすべての単位サイズの三角形(ちょうど1 -を内部に持つ)を計算するための最初のパスを実行します。 T[x,y]が三角形のサイズ(その辺の長さ)である表を更新します。このパスでは、すべてのセルを-から1に初期化します。

次に、上から下に移動して、より複雑な三角形を作成できます。位置[X、Y]で、あなたがダウン先頭にある三角形を検討する必要があり

  • [X-1、Y-1]
  • を[X、Y-1]
  • 新しい三角形の
  • [X + 1、Y-1]

サイズが三角形上記3のいずれかの1つのを加えた最小サイズであろう。その後、テーブルT[x,y]

T[x,y+1] = 1 + min(T[x-1,y], T[x,y], T[x+1,y]) 

は自分のテーブルTで最大の大きさの三角形を見つけ、対応する三角形の面積を計算し、最後で更新します。 (数式は読者の練習として残されている)

複雑さはO(n²)です。

+0

完璧な古典的なダイナミックプログラミングソリューション! –

+0

多分私は何かが間違っているかもしれませんが、3単位の三角形は3つの重なり合う2単位の三角形で作られていません。なぜなら、第3層ではダッシュの数が9ではなく5であると考えられるからです。 – MichalH

+0

@MichalH私のダイアグラムを見て、私は3ユニットの三角形と3つの2ユニットの三角形**の下降**を意味します**。これは、更新式に '+ 1'がある理由です。 – fjardon

0

効率はそれほど重要でない場合は、次の

は、候補者ため検索設定(それは左から右へ、各行を横断)一つのループを持っています。 -が見つかった場合は、割り込みが入り、検索してを試してみてください。

したがって、最初に右に移動して、終了位置を確認します(#)。次に、三角形(基数)の底辺を知り、次の行でどこに継続しなければならないかを直接知って、それをチェックし、その候補を完全に調べるまで繰り返します。 ind indixがliで、行がrowの右riだった場合は、row * row + 1のインデックスは、li + 1ri - 1の次の三角形に続く必要があります。

サイズを保存して、検索部分をもう一度続行します。 を終了すると、がすべての行を訪れた後に終了します。


あなたは少し、すでに発見された三角形の一部である-を無視することによってその効率を向上させることができます。しかし、それらが三角形の一部である場合にのみ基底列

0

私はアルゴリズムのエキスパートではありませんが、あなたは答えを出さずに助けを求めるだけで、私は答えを提出できると信じています。

スペースをテストして三角形内にあるかどうかを判断する方法を見つけ出す必要があります。いったんあなたがそれを持っている私はブルートフォースのアプローチ(すべてのスペースに対して "三角形のテスト"を実行する)を設計するだろう。

次に、brute forceソリューション(最適なアプローチではありません)がある場合は、より効率的にしてください。 など。効率的で賢明であることを心配しないでください。 希望に役立ちます。