距離変換の問題を解決しようとしています(マンハッタンの距離を使用)。基本的に、0 と 1 の行列を指定すると、プログラムはすべての位置の距離を最も近い 1 に割り当てる必要があります。たとえば、この
0000
0100
0000
0000
距離変換行列は
2123
1012
2123
3234
私の頭から考えられる解決策は次のとおりです。
最も遅いもの(実装しようとしたため最も遅い-非常に大きな行列で遅れていた):
ブルートフォース - プログラムが読み取る 1 ごとに、最初から最後までそれに応じて距離を変更します。
0 からの幅優先検索 - 0 ごとに、プログラムは最も近い 1 を裏返しに探します。
2 と同じですが、1 のマークから開始し、すべての距離を裏返しにします。
はるかに高速(他の人のコードから読み取る)
1 からの幅優先検索
1. Assign all values in the distance matrix to -1 or very big value. 2. While reading matrix, put all positions of 1's into queue. 3. While queue is not empty a. Dequeue position - let it be x b. For each position around x (that has distance 1 from it) if position is valid (does not exceed matrix dimensions) then if distance is not initialized or is greater than (distance of x) + 1 then I. distance = (distance of x) + 1 II. enqueue position into queue
その問題に対するより速い解決策があるかどうか尋ねたかった. 距離変換のアルゴリズムを検索しようとしましたが、それらのほとんどはユークリッド距離を扱っています。
前もって感謝します。