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の差)のみが必要です。

ソートされた配列(2 * k * nの差)でk最近傍を調べることにより、k最近傍のそれを拡張できます。

于 2012-11-04T08:35:35.253 に答える