构造平衡kd树(kd tree)
2015-07-24 14:46
281 查看
算法:
输入:k 维空间数据集 T={x1,x2,…,xN},其中 xi=(x(1)i,x(2)i,…,x(k)i)T,i=1,2,…,N;
输出:kd 树
(1) 开始:构造根节点,根节点对应于包含 T 的 k 维空间的超矩形区域。
选择 x(1) 为坐标轴,以 T 中所有实例 x(1) 坐标的中位数为切分点,将根节点对应的超矩形区域切分为两个子区域。切分由通过切分点并与坐标轴 x(1) 垂直的超平面实现。
由根节点生成深度为 1 的左、右子节点:左子结点对应坐标 x(1) 小于切分点的子区域,右子节点对应于坐标 x(1) 大于切分点的子区域。
将落在切分超平面上的实例点保存在根节点。
(2) 重复:对深度为 j 的节点,选择 x(l) 为切分的坐标轴,l=j(modk)+1,以该节点的区域中所有实例的 x(l) 坐标的中位数为切分点,将该节点对应的超矩形区域划分为两个子区域。切分由通过切分点并与坐标轴 x(l) 垂直的超平面实现。
由该节点生成深度为 j+1 的左、右子节点:左子节点对应坐标 x(l)小于切分点的子区域,右子节点对应坐标 x(l) 大于切分点的子区域。
将落在切分超平面上的实例点保存在该节点。
(3) 直到两个子区域没有实例存在时停止。从而形成 kd 树的区域划分。
相关文章推荐
- iOS-获取系统的相册图片
- 更改Eclipse下Tomcat的部署目录 ,防止上传的文件是到eclipse的克隆的tomcat上的webapp,而不是tomcat本身的webapp
- style样式的简单使用
- 系统架构设计应考虑的因素
- os.rename()导致WindowsError: [Error 32]的问题
- Jump Game II
- HDU 5307 He is Flying【FFT】
- Android 序列化 Parcelable 跟 Serializable
- keepass.pfx编译报错问题汇总
- iOS UITableView 中局部刷新实现方式
- hadoop常用命令
- 基于jQuery的email suggest插件
- Unix系统使用的地址索引结构有什么特点?
- myclipse 复制一个项目改名之后tomcat部署还是原来的名字 解决方法
- ElasticSearch在window下的基本配置
- 深入理解Memcached原理
- 亲自测试,WSUS脚本
- 正则表达式的数字实例
- C语言中对结构体或数组清零的最快方法
- 多台主机搭建redis集群