Ancêtre commun le plus bas de plusieurs nœuds dans un arbre n-aire

I am trying to implement LCA of multiple nodes in an n-ary tree in java. I am working with parse trees of sentences, So its reasonable to assume that number of children of a node <= 6. Multiple nodes here are two phrases(continuous word sequence) in a sentence. Let k be the number of nodes involved.

Une façon est de trouver l'ACV de deux nœuds pour k/2 paires et nous obtiendrons k/2 nœuds. Maintenant recurse sur ces nœuds k/2. L'ordre sera O (nlog k), où O (n) est la complexité des algorithmes linéaires de recherche d'ACV. Puis-je le faire plus efficacement?

0
@VSOverFlow Je vais avoir des pas de log (k) et chaque pas prend O (n), donc, globalement, son O (nlog k). Qu'est-ce que O (k) dans vos calculs?
ajouté l'auteur damned, source
Je pense que la complexité est O (n, k), pas O (n, log (k)). Vous aurez des pas de log (k) de k/2, k/4 .. qui est O (k).
ajouté l'auteur VSOverFlow, source
Je suppose que LCA (2, n) est O (n). Lorsque vous construisez l'arbre binaire, le nombre total d'appels LCA est O (k) (k/2 + k/4 + ....). La complexité d'exécution totale est donc O (n * k) (c'est-à-dire k appels de O (n)). Chacune des étapes log (k) a de nombreuses étapes O (n) (k/2, k/4, k/8, ...)
ajouté l'auteur VSOverFlow, source

1 Réponses

J'ai résolu le problème en utilisant le fait que les nœuds des phrases sont continus, c'est-à-dire qu'ils ont des indices continus dans la liste des nœuds feuilles d'un arbre d'analyse.

Laissez segment1 avoir des index de start1 vers end1 . Idem pour segment2 = (début2, fin2) .

L'ancêtre commun requis de (start1, end1) et (start2, end2) est l'ancêtre commun des nœuds avec les indices min (start1, start2) et max (end1, end2) .

0
ajouté
L'idée est que si tous les nœuds sont des nœuds feuilles consécutifs, l'ACV de tous ces nœuds sera l'ACV du premier et du dernier nœud.
ajouté l'auteur damned, source
Pouvez-vous s'il vous plaît donner la méthode complète? Je ne suis pas capable de convertir votre algorithme en code réel.
ajouté l'auteur javafan, source