Колега, який працює над генетичним програмуванням, задав мені наступне запитання. Я спершу спробував вирішити це на основі жадібного підходу, але, по-друге, подумав про зустрічний приклад жадного алгоритму. Отже, я подумав, що тут варто згадати.
Розглянемо два поліноми, які представлені деревами їх вираження. Наприклад, і наведено нижче:
Правила:
- Кожен вузол є або ім'ям змінної ( ), числом , або операцією (+, -, ×).
- Порядок обходу дерева повинен призвести до дійсного многочлена.
- Операційні вузли мають ступінь 2. Інші вузли мають ступінь 0. Усі вузли мають ступінь 1 (крім кореня, вищий ступінь якого дорівнює 0).
На вузлі N дерева визначте основну операцію так:
- Основна операція може змінити мітку вузла. Наприклад, можна змінити на 3, або + можна змінити на .
- Основна операція може побудувати дерево виразів поверх N (див. Приклад нижче).
Вартість основної операції типу 1 дорівнює 1. Вартість для типу 2 дорівнює кількості {+, -, ×} операцій у новобудованому дереві виразів.
Приклад для типу 2: Вартість наступної базової операції становить 2, оскільки дерево виразів, побудоване на вершині вузла N, використовує дві операції (- і ×).
Нехай Т1 і Т2 - два дерева експресії, що представляють многочлени. Визначте відстань Т1 і Т2 таким чином: мінімальна вартість основних операцій для перетворення Т1 в Т2. Зауважте, що нам не потрібно перетворене дерево мати таку саму структуру, як T2. Ми просто хочемо, щоб він обчислив той же поліном, що і T2. (Див. Коментарі для прикладу.)
Проблема: Враховуючи T1 і T2, подайте алгоритм, який обчислює їх відстань.
Приклад 1: Нехай Т1 і Т2 - це два дерева, проілюстровані на початку цієї публікації. Для перетворення правого дерева в ліве дерево можна побудувати дерево вартістю 3 поверх × і змінити 4 на 1 (загальна вартість - 4).
Приклад 2: Нехай T1 = представлений наступним деревом. Щоб перетворити T1 в T2 = , достатньо додати 1 до кожного з вузлів, щоб порівняти = T2. Це можна зробити, додавши дерево вираження витрат 1 на верхній частині кожного вузла. Цей приклад показує, що термінова конверсія (яку я назвав жадібним підходом на початку цієї посади) не є оптимальним підходом. Тобто, якщо хочеться створити терміни в T2, яких немає в T1 (тобто , , і 1), вартість буде набагато вище.4 x 3 6 x 2 4 x