kNN 算法的 kd 树实现( C 源码)

2017-02-22 19:14:56 +08:00
 begeekmyfriend
https://github.com/begeekmyfriend/kdtree

特点:绝对平衡,搜索极快,代价是动态性差,每次增删后需要重建。

实现是对增删进行缓存,直到重建才映射到实际数据结构中去。重建会对每个维度分量进行快速排序,以确保每个树节点都是取中值,实现了绝对平衡,也即最小高度,最大限度降低搜索比较次数,杜绝最差情况发生。

注意,排序只是对数据样本的索引进行移动,数据本身插入时只拷贝一次,数据样本集中缓存有利于 cache 命中。

有兴趣欢迎探讨。
2139 次点击
所在节点    程序员
5 条回复
y8y
2017-02-22 19:17:20 +08:00
我是第一个赞的,楼主的 C 代码看起来很舒服。
zgqq
2017-02-22 19:30:21 +08:00
大佬
franklinyu
2017-02-23 01:47:55 +08:00
除了「 for(; ;)」和「 8 個空格縮進」屬於口味不同以外,樓主的代碼簡直是一股清流……
congeec
2017-02-23 06:47:21 +08:00
正规军
wujunze
2017-04-20 18:10:58 +08:00
👍

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/342408

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX