Rubyでミンコフスキー距離
ITP1_10_D
AOJより、ミンコフスキー距離を算出する問題
文系の僕には式を見ても何も理解出来ませんでした。
Σなんて高校数学以来触ってすらない・・・。
Σを用いない計算式がググってもなかなか見つからずに困ったので備忘録用に。
結論
n = gets.to_i
a=gets.split.map &:to_i
b=gets.split.map &:to_i
c=n.times.map{|i|(a[i]-b[i]).abs}
p c.sum
p c.map{|i| i**2}.inject(:+)**0.5
p c.map{|i| i**3}.inject(:+)**(1/3.to_f)
p c.max
p=1~2までのそれぞれの距離の定義
#マンハッタン距離
Dxy=|x1−y1|+|x2−y2|+...+|xn−yn|
#ユークリッド距離
Dxy=√(|x1−y1|)**2+(|x2−y2|)**2+...+(|xn−yn|)**2)
#チェビシェフ距離
Dxy=maxni=1(|xi−yi|)
問題文に付属していた公式が上記。
p=1,2の場合は理解出来るがp=3の事例は見当たらずチェビシェフ距離の公式に至っては何を意味してるのかが分からない。
Wikipediaよりチェビシェフ距離とはチェス盤の距離らしいので、なんだ(|x2-x1|,|y2-y1|)
のことかと解決。
今回の場合では絶対値の最大値を取ってあげれば解決。
p=3の距離の定義
Dxy=(|x1−y1|)**3+(|x2−y2|)**3+...+(|xn−yn|)**3)**(1/3)
ググったところ、p=2のケースに1足して考える模様。
√は**(1/2)
とも受け取れるので、+1して**(1/3)
にするようです。
追記
@scivola さんの投稿 ミンコフスキー距離を絵にしてみた にて絵にして頂きました、光栄の限りです・・。
Author And Source
この問題について(Rubyでミンコフスキー距離), 我々は、より多くの情報をここで見つけました https://qiita.com/shiroux/items/16173c1588d22e81333c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .