function kdtree (list of points pointList, int depth)
{
// 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;
}
任何人都可以帮我解释一下“var int axis:= depth mod k;”,
为什么mod k,k是什么?
答案 0 :(得分:1)
k是多个维度。可变轴将包含一个轴,沿着该轴划分空间。
答案 1 :(得分:1)
k
是树的维度。您将不得不一个一个地沿着每个方向重复划分点集。
这里depth
表示树的级别。现在,当您沿着每个级别下移时,您必须移动到下一个轴,当您完成最后一个轴(即第k个维度)时,您将从第一个维度开始(或者在这种情况下,从(k-1)到第0维)。因此,下一个轴被选为depth mod k