Итак, я изучал реализацию алгоритма с наименьшим общим предком. Я рассмотрел множество различных алгоритмов (в основном вариации решения Trajan или вариации RMQ).
Я использую небиновое дерево. Мое дерево часто будет меняться между запросами, и поэтому предварительная обработка не обязательно будет стоить. Дерево не должно содержать более 50-75 узлов. Мне интересно, нужно ли мне использовать их алгоритмы или просто придерживаться своих собственных.
Мой алгоритм
myLCA(node1, node2) {
parentNode := [ ]
while (node1!=NULL) {
parentNode.push(node1)
node1 := node1.parent
}
while (node2!=NULL) {
for i in parentNode.size {
if (parentNode(i) == node2) {
return node2;
}
}
node2 := node2.parent
}
}