我必须实现k最近邻居搜索kd树中的10维数据。
但是问题是我的算法对于k = 1非常快,但是对于k> 1,它的速度要慢2000倍(k = 2,5,10,20,100)
这对于kd树木来说是正常的,还是我正在做些破烂的事?
最佳答案
好吧,这主要取决于您的特定实现和数据集。
平衡不良的树将意味着您必须搜索比所需更多的数据。确保您的树结构是健全的。
这也可能取决于您如何找到k个邻居。如果您的算法在树上搜索最近的邻居并将其存储,然后搜索第二个最近的邻居并将其存储,依此类推,那么您的搜索效率就不高。而是保留最近的k个邻居的运行列表,当发现遍历树的更近的邻居时,将凹凸点排除在列表之外。这样,您搜索一次,而不是k次。
无论哪种方式,听起来好像您正在为一门类(class)做这些。尝试与您的教授,助教或同学交谈,看看您的成绩是否很典型。
关于search - k-d树对kNN搜索有效。 k最近邻居搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2034199/