Алгоритм Гавела — Хакими

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
(перенаправлено с «Критерий Гавела — Хакими»)

Алгоритм Гавела — Хакимирекурсивный алгоритм позволяющий определить появляется ли данный список целых чисел как список всех валентностей некоторого конечного простого графа. При положительном ответе на этот вопрос список называется графическим.

Алгоритм предложен Вацловом Гавелом[cs] в 1955 и переоткрыт Луисом Хакими[en] в 1962.

Алгоритм

Алгоритм основан на следующей теореме.

Пусть [math]\displaystyle{ s,d_1,\dots,d_s,t_1,\dots,t_k }[/math] есть конечный список неотрицательных целых чисел в невозрастающем порядке. Список [math]\displaystyle{ s,d_1,\dots,d_s,t_1,\dots,t_k }[/math] является графическим, тогда, и только тогда, когда список [math]\displaystyle{ d_1-1,\dots,d_s-1,t_1,\dots,t_k }[/math] графический.

Описанную операцию следует применять поочерёдно с упорядочиванием списка. Если в какой-то момент получаем список из нулей то изначальный список являлся графическим. Если же в списке появится отрицательное число то изначальный список не являлся графическим.

Примеры

Граф со списком валентностей 4,4,3,3,2,2,1,1.
  • Применим алгоритм к списку [math]\displaystyle{ 4,4,3,3,2,2,1,1 }[/math]. Мы поочерёдно применяем теорему и упорядочивание. То что в результате получается список из нулей означает, что список [math]\displaystyle{ 4,4,3,3,2,2,1,1 }[/math] графический.
    [math]\displaystyle{ \begin{matrix} 4&4&3&3&2&2&1&1 \\ 3&2&2&1&2&1&1 \\ 3&2&2&2&1&1&1 \\ 1&1&1&1&1&1 \\ 1&1&1&1&1&1 \\ 0&1&1&1&1 \\ 1&1&1&1&0 \\ 0&1&1&0 \\ 1&1&0&0 \\ 0&0&0 \end{matrix} }[/math]
  • Применим алгоритма к списку [math]\displaystyle{ 7,6,3,3,2,2,1,1 }[/math]. То что в результате получается список из отрицательных чисел означает, что список [math]\displaystyle{ 7,6,3,3,2,2,1,1 }[/math] не является графическим.
    [math]\displaystyle{ \begin{matrix} 7&6&3&3&2&2&1&1 \\ 5&2&2&1&1&0&0 \\ 1&1&0&0&-1&0 \end{matrix} }[/math]

См. также

Примечания