2011-03-20 18 views
3

私は宿題としてこの問題を抱えており、どこから始めたらいいのかわかりません。再帰アルゴリズム(#1)を使用してソリューションを実装しましたが、スタックを使用して問題を解決する方法を理解できません。2次元配列で最も長くなる部分配列を見つける

15 x 15配列の中で最も長くなっている数値シーケンスを見つけます。例えばアレイ、4×4は、

97 47 56 36 
35 57 41 13 
89 36 98 75 
25 45 26 17 

が含まれている場合、次に数字の最長増加するシーケンスは17、26、36、41、47、56、57から成る長さ8のシーケンスである、97。なお増加する順序に重複はありません。

  1. この問題を解決してJavaで実装する再帰アルゴリズムを設計します。

  2. スタックを使用して同じ問題を解決する非再帰アルゴリズムを設計します。

+0

表示された配列が4x4であることを確認できません。 –

+0

@Recursor「どこから始めたらいいのか分かりません」ここから始めようhttp://home.earthlink.net/~patricia_shanahan/beginner.html –

+0

申し訳ありませんが、私はフォーマットを混乱させているに違いありません。 - 更新しました。 – Recursor

答えて

2

これは宿題ですので、ここでのヒントがある: あなたは有向非巡回グラフに数字のあなたの配列を変換することができます。 (シーケンス内で重複が許されないため、非循環です)。その後、アルゴリズムを使用して最長パス問題を解決し、グラフ内の最大長の簡単なパスを見つけることができます。

+0

私はその効果(ツリー)に何か考えていましたが、それも良いと思います。グラフはarray [x、y] - > array [x +/- 1]、[y +/- 1]> array [x、y]などで異なるすべてのノードのようなものでしょうか?結果を取得しているときにスタックがどこにあるのか分かりません。 – Recursor

+0

@Recursor - 問題を2つの部分として扱います。 1)再帰アルゴリズムで問題を解く。 2)再帰アルゴリズムを反復アルゴリズムに変え、再帰的バージョンのローカル変数/パラメータに保持された状態を保持するために 'Stack'を使用します。 –

関連する問題