Algorithm 删除BK树中的节点
我在中看到了许多不同的BK树实现,实际上没有一个包含从树中删除节点的方法 甚至没有提供关于节点删除的有意义的见解,因为作者只是建议标记要删除的节点,以便忽略它: 删除结构1[BK树]和结构2中的密钥遵循与上述过程类似的过程,特别考虑要删除的密钥是代表性x°[根密钥]的情况。在这种情况下,不能简单地删除密钥,因为它对于结构信息至关重要。相反,必须为每个键使用一个额外的位,表示该键是否实际对应于记录。相应地修改搜索算法以忽略与记录不对应的键。这涉及到在更新过程中测试额外的位 虽然理论上可以正确删除BK树中的节点,但在线性/次线性时间内是否可以这样做 虽然理论上可以正确删除BK树中的节点,但在线性/次线性时间内是否可以这样做 如果你想把它从BK树中移除,那么我想不出一种方法可以在线性时间内对所有情况进行移除。当节点被删除时,考虑<代码> 2 >代码>场景。请注意,我没有考虑与计算Levenshtein距离相关的时间复杂性,因为该操作不依赖于字数,尽管它也需要一些处理时间 删除非根节点Algorithm 删除BK树中的节点,algorithm,tree,time-complexity,abstract-data-type,bk-tree,Algorithm,Tree,Time Complexity,Abstract Data Type,Bk Tree,我在中看到了许多不同的BK树实现,实际上没有一个包含从树中删除节点的方法 甚至没有提供关于节点删除的有意义的见解,因为作者只是建议标记要删除的节点,以便忽略它: 删除结构1[BK树]和结构2中的密钥遵循与上述过程类似的过程,特别考虑要删除的密钥是代表性x°[根密钥]的情况。在这种情况下,不能简单地删除密钥,因为它对于结构信息至关重要。相反,必须为每个键使用一个额外的位,表示该键是否实际对应于记录。相应地修改搜索算法以忽略与记录不对应的键。这涉及到在更新过程中测试额外的位 虽然理论上可以正确删除B
1
可以在O(1)中完成,步骤2
和4
也要昂贵得多。插入单个节点是O(h),其中h是树的高度。更糟糕的是,必须对原始节点的每个子节点执行此操作,因此将是O(k*h),其中k是多个子节点
删除根节点