1

2 つの位置オブジェクト間の距離を把握するために Geokit を使用しています。http://geokit.rubyforge.org/

私の質問は、場所の配列がある場合、それらを調べて総移動距離を計算するのに最適なアルゴリズムは何ですか? 最初は Enumerable#inject で N-1 の位置オブジェクト間の移動距離のメモを渡す方法だと思っていましたが、実際の配列で既にチェックした位置オブジェクトの状態を保存する方法はありません.

これには、配列のサイズ、現在のインデックス、および注入の動作が必要です。理想的には、次のようなことができます:

locations = [Geokit::LatLng, Geokit::LatLng, ...]
locations.inject(0) do |memo, location|
  memo += location.distance_from(previous_location)
end 

ただし、この場合、previous_location は未定義です。

考え?

4

1 に答える 1

2

これは、達成したいことの非常に単純化された例です。反復を明確にするためだけに、距離メトリックとしてハミング数と絶対値を使用しています。

arr = [1, 2, 3, 4]
arr.each_cons(2).collect {|a| (a[1]-a[0]).abs }.reduce(:+)
=> 3
  1. Each_cons(2)は、2つの連続する要素ごとに取得します。この場合、[1,2]、[2、3]、および[3,4]を生成します。
  2. Collectは、各ペアを距離メジャーにマッピングするマップ操作です。
  3. 削減はそれらを足し合わせるだけです。
于 2012-09-13T01:08:16.993 に答える