我正在寻找在完全二叉树中给定两个节点的最近公共祖先的常数时间实现(父节点为x,子节点为2*x和2*x+1)。
我的问题是树中有大量节点和许多查询。是否有一种算法可以预处理,以便可以在常数时间内回答查询。
我研究了LCA using RMQ,但由于无法在这么多节点的树中使用数组,因此无法使用该技术。
有人能为我提供高效的算法实现,以便快速回答许多查询,知道它是完全二叉树,并且节点之间的关系如上所述。
我的方法是从两个给定节点开始,连续查找它们的父节点(node/2),并保留已访问节点的哈希列表。每当我们到达已经在哈希列表中的节点时,该节点将成为最近公共祖先。
我的问题是树中有大量节点和许多查询。是否有一种算法可以预处理,以便可以在常数时间内回答查询。
我研究了LCA using RMQ,但由于无法在这么多节点的树中使用数组,因此无法使用该技术。
有人能为我提供高效的算法实现,以便快速回答许多查询,知道它是完全二叉树,并且节点之间的关系如上所述。
我的方法是从两个给定节点开始,连续查找它们的父节点(node/2),并保留已访问节点的哈希列表。每当我们到达已经在哈希列表中的节点时,该节点将成为最近公共祖先。
但是当有很多查询时,这个算法非常耗时,最坏情况下可能需要遍历高度为30(树的最大高度)才能到达根节点(最坏情况)。