在写完这篇文章后,我决定付诸行动,将我的一个旧项目转换为使用recursion-schemes。 所涉及的数据结构是懒惰的kdtree。请查看具有显式递归和隐式递归的实现。 这主要是一种沿着以下方向进行的简单转换:data KDTree v a = Node a (Node v a) (N...
我使用了kd树算法生成树。 但是我发现这棵树不平衡,所以我的问题是,如果我们使用kd树算法,那么树是否总是平衡的?如果不平衡,我们该如何使其平衡? 我们可以使用AVL或红黑树等其他算法来平衡kd树吗? 我有一些样本数据,我使用了kd树算法,但是那棵树不平衡。 (14,31), (15,3...
我正在使用CGAL(最新版本)的KD树实现来搜索点集中的最近邻居。维基百科和其他资源似乎也表明,KD树是正确的选择。但不知何故,它们太慢了,并且维基百科还建议它们的最坏时间复杂度为O(n),这远非理想。 [开始编辑] 我现在使用的是"nanoflann",它比CGAL中等价的K邻居搜索快10...
对于一个新手来说,我不明白如何在递归函数内部删除类的实例。 考虑这段 k-d Tree 的代码: def remove(self, bin, targetAxis=0, parent=None): if not self: return None elif self.dat...
我目前正在为一个物理引擎(业余项目)编写KDTree。 KDTree不包含点。 相反,它包含用于环境中不同对象的轴对齐边界框。 我的问题是如何在节点满时决定如何拆分KDTree节点。 我正在尝试两种方法: 方法1:始终在最大轴上将节点完全平分。 这有一个优点,即树的分布相当均匀。 很...
我在查看维基百科的KD树页面。作为一个例子,我用Python实现了列出的构建KD树的算法。然而,使用KD树进行KNN搜索的算法切换到另一种语言并不是完全清晰的。英文解释开始让人感到有道理,但其中的某些部分(例如他们“展开递归”以检查其他叶节点的区域)对我来说并没有任何意义。这是如何工作的,如何...
我有一段代码,可以计算距离(未被分配的)最近的体素到一个已赋值的体素的距离。我有一个体素数组,其中一些体素已经被标量(1、2、3、4等)赋值,而一些体素为空(假设值为“0”)。下面的代码会找到距离未分配的体素最近的已分配的体素,并将该体素分配相同的标量。因此,标量为'0'的体素将根据最近的体素...
我目前正在尝试找到一个平衡的KD树的所有节点的K个最近邻居(其中K=2)。我的实现是代码维基百科文章的变体,可以相当快地找到任何节点的KNN,时间复杂度为O(log N)。问题在于我需要找到每个节点的KNN,如果我迭代每个节点并执行搜索,则时间复杂度达到O(N log N)左右。是否有更有效的...
是否有Python中的包可以在球面上执行类似于kdtree的操作以处理经度/纬度?(这需要正确考虑球面距离以及经度的循环绕组)。
输入:point = (lat, long) places = [(lat1, long1), (lat2, long2), ..., (latN, longN)] count = L 输出: neighbors = point附近的places子集。 (len(neighbors)=L) ...