02.11.2022

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


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

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

Алгоритм

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

Пусть s , d 1 , … , d s , t 1 , … , t k {displaystyle s,d_{1},dots ,d_{s},t_{1},dots ,t_{k}} есть конечный список неотрицательных целых чисел в невозрастающем порядке. Список s , d 1 , … , d s , t 1 , … , t k {displaystyle s,d_{1},dots ,d_{s},t_{1},dots ,t_{k}} является графическим, тогда, и только тогда, когда список d 1 − 1 , … , d s − 1 , t 1 , … , t k {displaystyle d_{1}-1,dots ,d_{s}-1,t_{1},dots ,t_{k}} графический.

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

Примеры

  • Применим алгоритм к списку 4 , 4 , 3 , 3 , 2 , 2 , 1 , 1 {displaystyle 4,4,3,3,2,2,1,1} . Мы поочерёдно применяем теорему и упорядочивание. То что в результате получается список из нулей означает, что список 4 , 4 , 3 , 3 , 2 , 2 , 1 , 1 {displaystyle 4,4,3,3,2,2,1,1} графический. 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 {displaystyle {egin{matrix}4&4&3&3&2&2&1&13&2&2&1&2&1&13&2&2&2&1&1&11&1&1&1&1&11&1&1&1&1&1&1&1&1&11&1&1&1&0&1&1&01&1&0&0&0&0end{matrix}}}
  • Применим алгоритма к списку 7 , 6 , 3 , 3 , 2 , 2 , 1 , 1 {displaystyle 7,6,3,3,2,2,1,1} . То что в результате получается список из отрицательных чисел означает, что список 7 , 6 , 3 , 3 , 2 , 2 , 1 , 1 {displaystyle 7,6,3,3,2,2,1,1} не является графическим. 7 6 3 3 2 2 1 1 5 2 2 1 1 0 0 1 1 0 0 − 1 0 {displaystyle {egin{matrix}7&6&3&3&2&2&1&15&2&2&1&1&0&01&1&0&0&-1&0end{matrix}}}





Яндекс.Метрика