一連のポイントを検索するためのkdツリーを構築しようとしていますが、ウィキペディアの記事での「中央値」の使用について混乱しています。使いやすさのために、ウィキペディアの記事では、kdツリー構築の擬似コードを次のように述べています。
function kdtree (list of points pointList, int depth)
{
if pointList is empty
return nil;
else
{
// Select axis based on depth so that axis cycles through all valid values
var int axis := depth mod k;
// Sort point list and choose median as pivot element
select median by axis from pointList;
// Create node and construct subtrees
var tree_node node;
node.location := median;
node.leftChild := kdtree(points in pointList before median, depth+1);
node.rightChild := kdtree(points in pointList after median, depth+1);
return node;
}
}
ここで中央値を適用する「正しい」方法がよくわからないという理由だけで、「中央値を選択...」の行について混乱しています。
私の知る限り、奇数サイズの(ソートされた)数値リストの中央値は、中央の要素(5つのリストの場合、要素番号3、または標準のゼロベースの配列のインデックス2)であり、偶数サイズの配列の中央値は、2つの「中央」要素の合計を2で割ったものです(つまり、6つのリストの場合、中央値は要素3と4の合計です。ゼロの場合は2と3です。インデックス付き-2で割った値)。
ただし、ここでは明確なポイントのセットを使用しているため、その定義は機能しませんか?それでは、特に長さ2のリストの場合、偶数サイズの数値リストの正しい中央値をどのように選択するのでしょうか。
私はすべての助けに感謝します、ありがとう!
-スティーブン