У меня есть большой набор данных деревьев, и я хотел бы найти его, указав древовидную структуру (связанный подграф). Запрос должен возвращать все вхождения дерева в наборе данных.
Существуют ли эффективные алгоритмы для этого?
Я думал о чем-то вроде суффиксных массивов, однако наивное кодирование деревьев как строк (с помощью фиксированного порядка обхода их узлов) не будет работать, так как дерево поиска может иметь любую произвольную форму.
ОБНОВИТЬ:
Некоторые подробности о типичных случаях, которые я ожидаю:
Набор данных будет состоять как минимум из десятков тысяч деревьев, каждое из которых будет содержать от двадцати до тридцати узлов. Деревья не будут не двоичными, но типичное число детей на узел будет небольшим (обычно не больше четырех или пяти, хотя в некоторых вырожденных случаях оно может достигать около тридцати). Количество этикеток составит десятки тысяч.
Мне это нужно для приложений НЛП: каждое дерево будет анализом зависимости предложения, каждый узел представляет слово вхождения, а каждая метка - словарное слово (с некоторым оформлением).