2012-10-22 100 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個最近鄰居。

相關問題