درخت کی دی

درخت کی دی نوعی ساختمان داده است که برای نگه داری نقطه ها در فضای k-بعدی استفاده می شود.درخت کی دی نوعی درخت دودویی است. در واقع می توان گفت این داده ساختار این قبلیت را دارد که بخشی متناهی از یک فضای k-بعدی را ذخیره کند.

نحوه ی ساخت

نقاط ورودی داده ساختار نقاطی در فضای k-بعدی هستند. هر راس از درخت کی دی یک نقطهٔ k-بعدی است و هر راس غیر برگ را می توان یک ابر صفحه در نظر گرفت که فضا را به دو قسمت تقسیم می کند و دو راسی که فرزند این راس هستنند نماینده آن بخش از فضا به حساب می آیند.

برای مثال اگر صفحه ی دوبعدی را درنظر بگیریم و یک خط x=3 را به عنوان جدا کننده در نظر بگیریم نقاط سمت چپ آن به عنوان فرزند سمت چپ این راس در نظر گرفته می شوند و نقاط سمت راست به عنوان فرزند سمت راست آن در نظر گرفته می شوند.

 
function build_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 subtree
    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;
}

عملیات ها