Фон
Бінарне дерево рішень являє собою кореневе дерево , де кожен внутрішній вузол (і корінь) позначений індекс J ∈ { 1 , . . . , n } таким чином, що жоден шлях від кореня до листа не повторює індекс, листя позначаються виходами в { A , B } , а кожне ребро позначено 0 для лівої дитини та 1 для правої дитини. Щоб застосувати дерево до вводу x :
- Почніть з кореня
- якщо ви знаходитесь в аркуші, виводите мітку аркуша або B і припиняєте
- Прочитайте мітку вашого поточного вузла, якщо тоді перейдіть до лівої дитини, а якщо тоді перейдіть до правої дитини.
- перейти до кроку (2)
Дерево використовується як спосіб оцінки функцій, зокрема ми говоримо, що дерево являє собою загальну функцію якщо для кожного маємо . Складність запиту дерева - це його глибина, а складність запиту функції - глибина найменшого дерева, яке його представляє.
Проблема
З огляду на бінарне дерево рішення T виводиться бінарне дерево рішень T 'мінімальної глибини, таке, що T і T' являють собою ту саму функцію.
Питання
Який найвідоміший алгоритм для цього? Чи відомі якісь нижні межі? Що робити, якщо ми знаємо, що ? А як бути, якщо нам потрібно лише, щоб T ' був приблизно мінімальної глибини?
Наївний підхід
Наївний підхід дається рекурсивно перерахувати всі бінарні дерева рішень глибинної г - 1 при тестуванні , якщо вони оцінюють одне і те ж , як Т . Здається, це вимагає O ( d 2 n n !Кроків (за умовищо він приймаєdкрокищоб перевіритищоТ(х)приймає значення для довільногох). Чи є кращий підхід?
Мотивація
Це питання мотивоване попереднім питанням про взаємодію між складністю запиту та складністю часу . Зокрема, мета - обмежити поділ часу на загальні функції. Ми можемо зробити дерево з оптимального для часу алгоритму з режимом виконання t , і тоді ми хотіли б перетворити його в дерево T ' для оптимального алгоритму запиту. На жаль, якщо t ∈ O ( n ! / ( N - d ) ! ) (А часто d ∈ Θ ( n )) вузьким місцем є перетворення. Було б добре, якби ми могли замінити чимось на кшталт 2 д .