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

Электромонтаж Ремонт и отделка Укладка напольных покрытий, теплые полы Тепловодоснабжение

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

15.12.2020

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

Алгоритм предложен Вацловом Гавелом в 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}}}

Имя:*
E-Mail:
Комментарий: