Припустимо, - дерево постійного ступеня, структура якого ми не знаємо. Проблема полягає у виведенні дерева , задаючи запити форми: "Чи лежить вузол на шляху від вузла до вузла ?". Припустимо, що кожен запит може відповідати оракулом постійно. Ми знаємо значення , кількість вузлів на дереві. Мета - мінімізувати час, необхідний для виведення дерева з точки зору .x a b n n
Чи існує алгоритм для вищезазначеної проблеми?
Припустимо, що ступінь будь-якого вузла в становить не більше 3.
Що я знаю
Корпус обмеженого діаметру легко . Якщо діаметр дерева дорівнює , то ми можемо отримати алгоритм ділення і перемоги:
Будь-яке двійкове дерево має хороший роздільник, який розділяє дерево на компоненти розміром не менше 1/3n.
- Виберіть будь-яку вершину x. Якщо це хороший роздільник мітки, то і повторіть.
- Знайдіть усіх 3 сусідів х.
- Рухайтеся в напрямку сусіда, який має найбільшу кількість вузлів. Повторіть крок 2 із сусідом.
Оскільки пошук сепаратора займає максимум кроків, ми отримуємо алгоритм .O ( n D log n )
рандомізовані алгоритм . (зрушено з коментарів нижче)
Виберіть дві вершини х та у випадковим чином. З 1/9 ймовірністю вони будуть лежати на протилежних сторонах роздільника. Виберіть середній вузол шляху від до . Подивіться, чи це роздільник, чи не двійковий пошук.у
Він займає очікуваний час для пошуку сепаратора. Таким чином, ми отримуємо рандомізований алгоритм.
Фон Про цю проблему я дізнався від друга, який працює в імовірнісних графічних моделях. Вищезазначена задача приблизно відповідає вивченню структури дерева перехрестя за допомогою оракула, який, з урахуванням трьох випадкових змінних X, Y і Z, може визначити значення взаємної інформації між X і Y з урахуванням значення Z. Якщо значення близьке до нуля, можна вважати, що Z лежить на шляху від X до Y.