以下のアルゴリズムについて考えてみましょう。2dの配列から最小の和のパスを見つける
各ノードに値があるとします。 0,0
から始まり、n,m
に到達する必要があります。 i,j
からi+1,j
またはi,j+1
に行くことができます。各ブロックを踏むと、そのブロックの値が現在のスコアに加算されます。あなたがいつも最後に肯定的なスコアを持つn,m
(可能なパスを通して)に達することができるように、あなたが携行しなければならない最小の最初のスコアは何ですか?
例:
Matrix -> 2 3 4
-5 -6 7
8 3 1
回答 - > 6 - パス2、-5、-6,3,1我々は1に着陸するとき、我々は正のスコアを持つように、我々は6の初期スコアを必要としますof 1
私はブルートフォースとダイナミックプログラミングを使用してこれを行うことができますが、これよりも良いアプローチを考えています。私はこれを行うことができるので、思考/アイデアを実装する必要はありません。 。多くの検索アルゴリズムがあります
あなたは、私はそうは思わないアルゴリズムのためのアイデアについて尋ねている場合は、場所です。たぶん[プログラマー](http://programmers.stackexchange.com/)を試してみてください。 – dabadaba
これは古典的なA *アルゴリズムのように聞こえます。多分dijkstraアルゴリズムが役に立ちます。 – Burkhard
あなたは 'O(| E |)= O(m * n)'や空間の複雑さ 'O(min(m、n))'よりも時間効率のよいアルゴリズムを望むことはできません...動的プログラミングソリューションのために(ボトムアップ)! @Burkhard私はあなたが深刻ではないことを願っています...これらのアルゴリズムは、この問題の総過剰です。ダイクストラは機能しません(負のエッジウェイト)。 – fabian