2012-10-22 63 views
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); 

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

回答

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个最近邻居。

相关问题