Продукт всех узлов, кроме одного в бинарном дереве

cs.stackexchange https://cs.stackexchange.com/questions/126920

Вопрос

Предположим, нам дают бинарное дерево с целым числом, сидящим на каждом узле.Я ищу эффективный способ найти для каждого пути от корня до листа каждого возможного продукта с ровно одним узлом, опущенным.Я ищу решение без подразделений (то есть целые числа могут быть нулевыми).

один способ пойти об этом, я думал о том Я могу вычислить все возможные частичные продукты, начиная с корня.Это каждый узел хранит продукт уникального пути от корня на этот узел (но кроме целочисленного, хранящегося в этом конкретном значении).Затем для каждого узла листьев я могу подняться по пути к корневому узлу, умножая целые числа в пути.При данном узле до накапливания узла в продукт я могу умножить продукт с префиксом продукта, хранящимся в узле.

Это похоже на то, что я делаю много избыточных умножений при посещении каждого пути от листа к корню, поскольку эти пути потенциально делятся много узлов.Есть ли путь более быстрый способ сделать это?

Это было полезно?

Решение

Один простой подход: для внутреннего узла $ x $ , пусть $ p (x) $ Обозначим продукт целых чисел на пути от корня на $ x $ , и пусть $ q (x) $ < / SPAN> Обозначим набор целых чисел, доступных в качестве продукта всего, кроме одного из целых чисел на пути от корня на $ x $ . Теперь спуститесь на дерево из рута вниз до листьев, вычисления $ P (x) $ и $ q (x) $ для каждого узла $ x $ , как вы идете. Обратите внимание, что вы можете вычислить $ p (x), q (x) $ из $ p (w), q (w ) $ , где $ W $ - родитель $ x $ .

Время работы асимптотического худшего случая будет $ O (n ^ 2) $ . Ни один алгоритм не имеет лучшего времени асимптотического пробега в худшем случае, так как может быть $ \ theta (n ^ 2) $ Разные продукты, которые вам нужно выводить, поэтому любой правильный алгоритм Нужно иметь худшее время выполнения, по крайней мере, $ \ theta (n ^ 2) $ .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top