Я пытаюсь создать 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 в стандартном массиве с нулями) ), а медиана массива четного размера - это сумма двух «средних» элементов, разделенных на два (иначе, для списка из 6 вещей, медиана - это сумма элементов 3 и 4 - или 2 и 3, если индексирован нулями - делится на 2.).
Однако, конечно, это определение здесь не работает, так как мы работаем с определенным набором точек? Как тогда выбрать правильную медиану для списка чисел четного размера, особенно для списка длины 2?
Я ценю любую помощь, спасибо!
-Stephen