У меня есть большой ( > 1000) набор ориентированных ациклических графов с большим ( > 1000) набором вершин каждый. Вершины помечены, мощность ярлыка мала (< 30)
Я хочу идентифицировать (мои) подструктуры, которые часто появляются во всем наборе графиков.
- Подструктура представляет собой график по крайней мере двух непосредственно связанных вершин с определенными метками. Такая субструктура может появляться один или несколько в одном или нескольких из приведенных входных графов. Например, "[вершина с меткой A с двумя непосредственно связанными дочерними элементами, помеченная B], появляется дважды на графике U и один раз на графике V".
- Подструктура, которую мы ищем, должна подчиняться набору заданных правил, которые фильтруют метки ярлыков. В качестве примера: подструктура, содержащая вершину, помеченную A, интересна, если подграфом является "вершина, помеченная буквой A, которая имеет хотя бы один непосредственно связанный дочерний элемент, помеченный буквой B, и не является непосредственно связанным собором вершины с меткой U или V", Подструктуры, которые не соответствуют этим правилам, могут отображаться на входных графах, но не представляют интереса для поиска.
Вывод, который мы ищем, представляет собой список подструктур и их (количество) появлений на данных графиках.
Я попытался заглянуть в вещи и (как это всегда случается со мной) проблема NP-полная. Насколько я вижу, gSpan является наиболее распространенным алгоритмом для решения этой проблемы. Однако, как указано выше, я не ищу какую-либо общую подструктуру на графиках, а только те, которые подчиняются определенным правилам. Нужно иметь возможность использовать это, чтобы уменьшить пространство поиска.
Любое понимание того, как подойти к этой проблеме?
Обновление: я должен, вероятно, добавить, что вышеупомянутые правила могут быть рекурсивными до некоторой степени. Например, "вершина с меткой A с по меньшей мере двумя детьми, помеченными буквой B, каждая из которых имеет хотя бы один дочерний элемент, помеченный буквой A". Максимальная глубина рекурсии составляет от 1 до 10.
Обновление II: указывая на то, что мы не ищем известные или предпочтительные подструктуры, а добываем их. Нет иглы spoon.