2008-09-24 9 views

Répondre

5
x = [2, 5, 8, 33, 58] 
print x.collect {|n| x.collect {|i| (n-i).abs}}.flatten 

Je pense que cela le ferait.

0

Si vous voulez vraiment un tableau au lieu d'une matrice, c'est O (n^2/2) au lieu de O (n^2).

result=[] 
x.each_index{|i| (i+1).upto(x.size-1){|j| result<<(x[i]-x[j]).abs}} 
+0

cela est encore O (n^2), mais avec la moitié des comparaisons numériques. O (n!) N'est pas ce que tu veux dire quand même. –

+0

Oops - Si 4! est 4 * 3 * 2 * 1, qu'est-ce que 4 + 3 + 2 + 1 appelé? – AShelly

+0

1 + 2 + ... + n = n * (n-1)/2 – grifaton

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

donne

[[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]]

(le format comme en imprimant avec 'pp' au lieu de puts)

et

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

donne

[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]

si vous voulez vraiment un tableau