Любой рабочий пример алгоритма VF2?

Я читал алгоритм VF2 для определения изоморфности двух графиков, но мне почему-то не хватает общей картины. Возможно, мне не хватает соответствующего фона в этой области, но все, что я вижу, это набор правил, которые мне нужно использовать на каждом шаге, не видя интуитивно понятного объяснения, почему эти шаги выполняются.

Из базового Google, кажется, это считается одним из де-факто алгоритмов для определения того, являются ли два графика изоморфными, но по какой-то причине я не могу найти объяснение, достаточно простое для понимания на высоком уровне. Или этот алгоритм известен под другим именем?

В любом случае, кто-нибудь знает какие-нибудь примеры работы этого алгоритма?

2 ответа

Решение

Я не уверен, что это то, что вы ищете, но алгоритм VF2 работает, как показано ниже.

Допустим, у вас есть 2 графика: V и V ', и вы хотите сопоставить V с V'

Алгоритм спускается по дереву, на каждом шаге вы пытаетесь сопоставить следующий элемент V с одним из V 'и останавливаетесь, когда проходили все узлы в V' (когда вы находите лист).

Алгоритм:

  • Первый шаг: сопоставить пустой V с пустым графом V '.
  • Второй шаг: попробуйте объединить один узел в V с одним узлом в V '
  • ...
  • N-й шаг: попробуйте сопоставить один узел в V с одним новым узлом в V ', если вы не можете вернуться на один шаг назад в дереве и попробовать новое совпадение на предыдущем шаге... и если вы не можете вернуться снова и т. Д....
  • ...
  • КОНЕЦ: когда вы найдете лист, то есть когда вы прошли все узлы в V 'или когда вы прошли все дерево, не найдя лист.

пример

Вот пример, алгоритм продолжить слева направо от дерева.

"A <-> B" означает сопоставить узел A из V с узлом B из V '

Надеюсь, я ясен, и это то, что вы ищете.

Я написал общий обзор VF2, а также довольно компактную с нуля реализацию Java для хеминформатики.

Другие вопросы по тегам