2010-11-23 4 views
4

Предположим, у меня есть большой (несколько тысяч узлов) ориентированный граф G и гораздо меньший (3-5 узлов) направленный граф g. Я хочу подсчитать, сколько изоморфизмов g находятся в G. Другими словами, я хочу знать, сколько уникальных наборов узлов в G соответствует g. Я понимаю, что это экземпляр проблемы изоморфизма подграфа и поэтому NP-полно. Однако, учитывая, что вы можете предположить, что g невелик, существует ли какой-либо разумно эффективный алгоритм для этого?Подсчет подсписных экземпляров

+0

Возможно, http://math.stackexchange.com/ даст вам лучшие результаты - я знаю, что вы ищете, это алгоритм, но вы, вероятно, могли бы разработать алгоритм из теории – veljkoz 2010-11-23 19:34:54

+0

Является ли ваша проблема «одним случаем» или вы хотите общий алгоритм. Я просто спрашиваю, потому что какая-то особенность на мощности краев g может многое помочь ... – 2010-11-23 19:36:09

ответ

1

Несмотря на то, что изоморфизм графа является NP-полным, проблемы, с которыми вы сталкиваетесь в реальном мире, часто довольно просты. Простой грубой силы должно быть достаточно: пусть M_i будет набором карт из первых i узлов g в узлы G. Начните с m_0, содержащего пустую карту и протягивая ее по одному узлу за раз, отбрасывая любые карты, которые нарушают ограничение x->y iff m(x)->m(y).

Вы хотите заказать узлы в g, чтобы очень много обрезки происходило раньше. Предполагая, что ваши графики довольно разрежены, вам понадобится заказ, который как можно раньше завершает как можно большее количество ребер, возможно, dfs из узла с наивысшей степенью точности.

Смежные вопросы