Предположим, что - дерево постоянной степени, структура которого мы не знаем. Проблема состоит в том, чтобы вывести дерево , задавая запросы в форме: «Находится ли узел на пути от узла к узлу ?». Предположим, что на каждый запрос оракул может ответить в постоянное время. Мы знаем значение , количество узлов в дереве. Цель состоит в том, чтобы минимизировать время, необходимое для вывода дерева в терминах .x a b n n
Существует ли алгоритм для вышеуказанной задачи?
Предположим, что степень любого узла в не больше 3.
Что я знаю
Случай с ограниченным диаметром прост . Если диаметр дерева равен , то мы можем получить алгоритм «разделяй и властвуй»:
Любое двоичное дерево имеет хороший разделитель, который делит дерево на компоненты размером не менее 1/3n.
- Выберите любую вершину х. Если это хороший разделитель меток то и рекурсивно.
- Найти всех 3 соседей х.
- Двигайтесь в направлении соседа, который имеет наибольшее количество узлов. Повторите шаг 2 с соседом.
Поскольку нахождение разделителя занимает не более шагов, мы получаем алгоритм .
рандомизированный алгоритм. (перенесено из комментариев ниже)
Выберите две вершины x и y случайным образом. С вероятностью 1/9 они будут лежать на противоположных сторонах разделителя. Укажите средний узел пути от до . Посмотрите, если это разделитель, если не делать бинарный поиск.
Требуется ожидаемое время нахождения разделителя. Таким образом, мы получаем рандомизированный алгоритм.
Фон. Я узнал об этой проблеме от друга, который работает в вероятностных графических моделях. Вышеупомянутая проблема примерно соответствует изучению структуры дерева соединений с использованием оракула, который, учитывая три случайные величины X, Y и Z, может сообщать значение взаимной информации между X и Y, учитывая значение Z. Если значение близко к нулю, мы можем предположить, что Z лежит на пути от X до Y.