Как мне сгенерировать массив парных расстояний в Ruby? - PullRequest
1 голос
/ 24 сентября 2008

Скажем, у меня есть массив, который представляет собой набор точек:

x = [2, 5, 8, 33, 58]

Как мне создать массив всех парных расстояний?

Ответы [ 3 ]

5 голосов
/ 24 сентября 2008
x = [2, 5, 8, 33, 58]
print x.collect {|n| x.collect {|i| (n-i).abs}}.flatten

Я думаю, что это сделало бы.

0 голосов
/ 25 сентября 2008
x.map{|i| x.map{|j| (i-j).abs } }

дает

[[0, 3, 6, 31, 56],
 [3, 0, 3, 28, 53],
 [6, 3, 0, 25, 50],
 [31, 28, 25, 0, 25],
 [56, 53, 50, 25, 0]]

(отформатируйте его так, напечатав его с помощью «pp» вместо put)

и

x.map{|i| x.map{|j| (i-j).abs } }.flatten

1010 * дает *

[0, 3, 6, 31, 56, 3, 0, 3, 28, 53, 6, 3, 0, 25, 50, 31, 28, 25, 0, 25, 56, 53, 50, 25, 0]

если вы действительно хотите массив

0 голосов
/ 25 сентября 2008

Если вам действительно нужен массив вместо матрицы, это O (n ^ 2/2) вместо O (n ^ 2).

result=[]
x.each_index{|i| (i+1).upto(x.size-1){|j| result<<(x[i]-x[j]).abs}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...