如何通过在这两个数字之间具有第一个数字和距离来找到第二个数字

时间:2012-10-22 07:20:41

标签: maple

我是枫新手,我不知道该做些什么!我有10个数字,为​​了找到k这个数字中的任何一个,我需要保持所有数字之间的距离并对它们进行排序,根据这些距离我可以得到哪个x是最近的x到当前数字所以:

for i from 1 to 10 do
  for j from 1 to 10 do
    dist[j]     := abs(x[i]-x[j]);
    result[i,j] := abs(x[i]-x[j]);
  end do; 
end do;

for h from 1 to 10 do
  for k from 1 to 10 do 
    arr[k] := result[h,k];   
  end do;

  distances := (quicksort(arr,1,10));
  for t from 1 to 10 do
    sortedMatrix[h,t] := distances[t];
  end do; 
end do;

print(sortedMatrix);

现在我有距离和数字,但我不知道其他数字是什么?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以从N个元素的数组开始,对于那些N个元素中的每一个,你想要该数组中最近的邻居。  我的方法是先对数组进行排序,然后循环遍历它,将最近邻居的每个元素设置为与排序数组中的邻居相等。

示例:假设您有阵列[5,1,86,54,23,46]。如果你对它进行排序,你会得到[1,5,23,46,54,86]。要查找最近的邻居,请遍历数组并查看相邻的两个元素。例如,46在排序数组中有23和54作为相邻元素。 45最接近54,所以这是他的邻居。

无需计算元素之间的所有距离(n * n差异),只需要排序数组中相邻nodess之间的距离(2 * n差异)。

您可以通过查看排序数组中的k个最近邻居来扩展k个最近邻居(2 * k * n差异)。