我是枫新手,我不知道该做些什么!我有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);
现在我有距离和数字,但我不知道其他数字是什么?
答案 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差异)。