Ефективні алгоритми пошуку колекції дерев


9

У мене великий набір дерев, і я хотів би здійснити пошук, вказавши деревце (підключений підграф). Запит повинен повертати всі виникнення дерева в наборі даних.

Чи є ефективні алгоритми для цього?

Я думав про щось на зразок суфіксних масивів, однак, наївне кодування дерев як струни (за допомогою фіксованого впорядкованого впорядкування їхніх вузлів) не буде працювати, оскільки пошуковий файл може мати будь-яку довільну форму.

ОНОВЛЕННЯ:

Дещо про типові екземпляри, які я очікую:

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

Мені це потрібно для програм NLP: кожне дерево буде розбором залежності речення, кожен вузол, що представляє слово виникнення, а кожен мітка словника (з деякою прикрасою).


1
У цьому томі представлено обговорення паралельних алгоритмів ізотерфізму піддерева.
Ентоні Лабарре

1
Вибачте, я подумав, що ви шукаєте підключений підграф, який обов’язково буде деревом, який з’явиться у заданому наборі дерев. Не могли б ви уточнити, в чому аспекти вашої проблеми відрізняються від цього опису?
Ентоні Лабарре

1
Ви заздалегідь знаєте щось про дерева? Бінарний? Скільки різних міток вузлів ви очікуєте? Будь-які обмеження щодо ефективності використання простору? Я запитую, тому що якщо ви виконуєте безліч запитів на одному і тому ж наборі даних, рішення може включати певний тип агресивної індексації.
Елі

1
Чи знайомі ви з відповідністю гілочок XML? Здається, ваша проблема є окремим випадком, тому ви можете просто використовувати будь-який із існуючих алгоритмів та програмного забезпечення.
Марек Хробак

2
Я б припустив, що найкраще ігнорувати структуру графіків. З огляду на типовий запит, якщо ви відкинете структуру, скільки дерев, як ви очікуєте, мають усі ці слова? У ваших запитах є якісь символи чи вони точні? Якщо слова в запиті схожі на "Кішка з'їла капелюх", скільки графіків насправді матиме як слова "кішка", так і "капелюх"? Якщо ви просто вказуєте кожне слово на набір дерев, то перетинаєте всі набори, можливо, ви могли б наївно шукати результат, не покладаючи на це занадто великих витрат.
Елі

Відповіді:


3

Хоча це спеціально не спрямоване на (укорінені) дерева, я думаю, що структура даних G-trie може досить добре працювати у ваших налаштуваннях. Це адаптація трійки (для пошуку наборів рядків) до графіків.


1

Якось назад я написав алгоритм канонізації дерев Рональда Редада і виклав його на wikipedia .

Я зробив би хештел для кожного підпису внутрішнього вузла і позначив їх списком покажчиків назад на підкреслення. Однак це буде працювати тільки для дерев з справжніми листям.

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