Java版本KDTree
在KDTree中,只有n >> 2 ^ xn时,在明显得有KDTCount << n,
n是点的个数,
xn是点的维数
KDTCount是在KDTree搜索时计算距离的次数统计
package main;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class KDTreeMain {
public static int KDTCount = 0; // 统计在kdt 搜索的时候,计算了和几个点的距离
public static void main(String[] args) {
/*
* n >> 2^xn 时, KDTCount才明显 < n
*
* =========================
* n = 40000, xn = 10
buld kdt time = 30760.0
query kdt time = 1404.0
best = 0.3296984744447501
KDTCount = 4488
query brute time = 3317.0
best2 = 0.3296984744447501
==========================
n = 50000, xn = 10
buld kdt time = 49664.0
query kdt time = 558.0
best = 0.3355435846472523
KDTCount = 2056
query brute time = 5557.0
best2 = 0.3355435846472523
==========================
n = 50000. xn = 20
buld kdt time = 63560.0
query kdt time = 15136.0
best = 0.8319764077450744
KDTCount = 37500
query brute time = 5791.0
best2 = 0.8319764077450744
**/
int n = 50000; // 样本点个数
int xn = 10; // 样本点维数
int deep = 0; // 轴
// 随机生成训练样本数据
List<Point> pointList = new LinkedList<Point>();
for (int i = 0; i &