0

我对枫树很陌生,我不知道该怎么做!我有 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);

现在我有了距离和一个数字,但我不知道另一个数字是什么?

4

1 回答 1

0

如果我理解正确,您从一个包含 N 个元素的数组开始,并且对于这些 N 个元素中的每一个,您都想要该数组中最近的邻居。我的方法是先对数组进行排序,然后对其进行循环,将每个元素的最近邻居设置为排序数组中的邻居。

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

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

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

于 2012-11-04T08:35:35.253 回答