Java n元树中多个节点的最低共同祖先
我试图在java中实现n元树中多个节点的LCA。我正在处理句子的解析树,因此可以合理地假设一个节点的子节点数我利用短语的节点是连续的这一事实解决了这个问题,即在解析树的叶节点列表中有连续的索引 让Java n元树中多个节点的最低共同祖先,java,tree,nlp,text-processing,graph-algorithm,Java,Tree,Nlp,Text Processing,Graph Algorithm,我试图在java中实现n元树中多个节点的LCA。我正在处理句子的解析树,因此可以合理地假设一个节点的子节点数我利用短语的节点是连续的这一事实解决了这个问题,即在解析树的叶节点列表中有连续的索引 让segment1具有从start1到end1的索引。segment2=(start2,end2)的情况也一样 (start1,end1)和(start2,end2)所需的共同祖先是索引为min(start1,start2)和max(end1,end2)的节点的共同祖先。我认为复杂性是O(n.k)而不是O
segment1
具有从start1
到end1
的索引。segment2=(start2,end2)
的情况也一样
(start1,end1)
和(start2,end2)
所需的共同祖先是索引为min(start1,start2)
和max(end1,end2)的节点的共同祖先。我认为复杂性是O(n.k)而不是O(n.log(k))。您将拥有k/2、k/4.的日志(k)步骤。。这就是O(k)。@VSOverFlow我有log(k)个步骤,每个步骤都有O(n),因此,总的来说是O(nlog k)。你的计算中O(k)是什么?我假设LCA(2,n)是O(n)。构建二叉树时,LCA调用的总数为O(k)(k/2+k/4+…)。所以总的运行时复杂度是O(n*k)(即O(n)的k个调用)。每个log(k)步骤都有许多O(n)步骤(k/2,k/4,k/8,…),你能给出完整的方法吗?我无法将您的算法转换为实际代码。我的想法是,如果所有节点都是连续的叶节点,那么所有这些节点的LCA将是第一个和最后一个节点的LCA。