Знаходження відстані між двома поліномами (представлені у вигляді дерев)


20

Колега, який працює над генетичним програмуванням, задав мені наступне запитання. Я спершу спробував вирішити це на основі жадібного підходу, але, по-друге, подумав про зустрічний приклад жадного алгоритму. Отже, я подумав, що тут варто згадати.


Розглянемо два поліноми, які представлені деревами їх вираження. Наприклад, x32x+1 і x2+4 наведено нижче:

Правила:

  1. Кожен вузол є або ім'ям змінної ( ), числом , або операцією (+, -, ×).x,y,z,
  2. Порядок обходу дерева повинен призвести до дійсного многочлена.
  3. Операційні вузли мають ступінь 2. Інші вузли мають ступінь 0. Усі вузли мають ступінь 1 (крім кореня, вищий ступінь якого дорівнює 0).

На вузлі N дерева визначте основну операцію так:

  1. Основна операція може змінити мітку вузла. Наприклад, можна змінити на 3, або + можна змінити на .x×
  2. Основна операція може побудувати дерево виразів поверх 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), вартість буде набагато вище.x4x4+4x3+6x2+4x+1x(x+1)4x4 x 3 6 x 2 4 x4x36x24x


2
Якщо операція "видалення" не дозволена, то відстань не є відстані. Наприклад: дерево T1 = (x * x) +4 не можна перетворити на T2 = x, але T2 можна перетворити на T1, додавши (* x), а потім (+4) вгорі x. Це нормально? Або слід визначити відстань як мінімальну операцію, необхідну для перетворення T1 в T2 або T2 в T1.
Marzio De Biasi

4
Вартість дорівнює 0, якщо і лише тоді, коли дві задані арифметичні формули (без поділу) являють собою один і той же многочлен. Якщо я правильно його пам’ятаю, це типова проблема coRP (випадковим призначенням), яка, як відомо, не існує в P.
Цуйоші Іто

4
@Tsuyoshi: О, бачу. Ви вказуєте на проблему тестування поліноміальної ідентичності . (Хороші посилання: [1 ] та [2 ]). Я повинен подумати над цим. Тим часом будь-яка пропозиція вітається.
MS Dousti

4
Так, це все. Здається, що в типовій версії проблеми тестування поліноміальної ідентичності два вхідні многочлени подаються як схеми, а не формули. Тож моє формулювання, що версія формули є "типовою", ймовірно, було неточним. Так чи інакше, навіть розміщення версії формули в P видається відкритою проблемою.
Цуйосі Іто

2
@ Vor: У поточній формуляції вхід T1 - це справді дерево, а вхід T2 - це многочлен, який, як відомо, подається як дерево, у наступному розумінні. Зміна T1 на інше дерево, яке представляє один і той же многочлен, може взагалі змінити відповідь, тоді як зміна T2 аналогічним чином не робить.
Цуйосі Іто

Відповіді:


10

Дерево Редагувати відстань - це узагальнення відстані редагування рядків. Відстань між двома деревами - це мінімальна кількість вставок вузлів \ видалення \ та відновників, необхідних для перетворення одного дерева в інше. (коли ми видаляємо вузол v, діти v стають дітьми батьків (v)). Проблема є важкою для NP, коли дерева не впорядковані, але коли вони впорядковані (тобто є порядок зліва направо серед побратимів), проблема вирішується за O (n ^ 3) час (як у статті, що Садек згадав). Хороше опитування, яке описує це: http://portal.acm.org/citation.cfm?id=1085283


1
Спасибі Авів. Буде чудово, якщо ви з’єднаєте свої відповіді (я думаю, у вас проблеми з використанням попереднього облікового запису). Ви можете використовувати поради в цій публікації (Особливо, це посилання ).
MS Dousti

Як би цей підхід охоплював різні дерева з еквівалентними поліномами
Нарек Божикян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.