A Havel-Hakimi-algoritmus egy gráfelméleti algoritmus, amely egy adott fokszámsorozatról eldönti, hogy létezik-e olyan egyszerű gráf, amelynek csúcsfokai megegyeznek ezzel a sorozattal. Az algoritmust Vaclav Havel (1955) és Simon Hakimi (1962) dolgozta ki.
Egy fokszámsorozat akkor valósítható meg egy egyszerű gráfban, ha az algoritmus ismételt csökkentésekkel és rendezésekkel ki tudja szűrni az érvényes csúcsösszekötéseket.
HavelHakimi(sequence): amíg sequence nem üres: rendezd sequence-et csökkenő sorrendbe ha a sequence első eleme negatív: térj vissza Hamis ha minden elem 0: térj vissza Igaz vegyük ki az első elemet (max_degree) ha max_degree > len(sequence): térj vissza Hamis csökkentsük a sequence első max_degree elemét 1-gyel térj vissza Igaz
()
def havel_hakimi(sequence):
while sequence:
# Rendezés csökkenő sorrendbe
sequence.sort(reverse=True)
# Negatív értékek ellenőrzése
if sequence < 0:
return False
# Nullák ellenőrzése
if all(degree == 0 for degree in sequence):
return True
# Legnagyobb fokszám eltávolítása
max_degree = sequence.pop(0)
# Ellenőrizzük, hogy van-e elég csúcs csökkenteni
if max_degree > len(sequence):
return False
# Csökkentsük az első max_degree csúcsot
for i in range(max_degree):
sequence -= 1
return True
# Példa használat
sequence =
print("Megvalósítható:", havel_hakimi(sequence))
Kimenet:
Megvalósítható: True
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool havel_hakimi(vector<int> sequence) {
while (!sequence.empty()) {
// Rendezés csökkenő sorrendbe
sort(sequence.rbegin(), sequence.rend());
// Negatív értékek ellenőrzése
if (sequence < 0) {
return false;
}
// Nullák ellenőrzése
if (all_of(sequence.begin(), sequence.end(), (int degree) { return degree == 0; })) {
return true;
}
// Legnagyobb fokszám eltávolítása
int max_degree = sequence;
sequence.erase(sequence.begin());
// Ellenőrizzük, hogy van-e elég csúcs csökkenteni
if (max_degree > sequence.size()) {
return false;
}
// Csökkentsük az első max_degree csúcsot
for (int i = 0; i < max_degree; ++i) {
sequence -= 1;
}
}
return true;
}
int main() {
vector<int> sequence = {4, 3, 3, 2, 2};
cout << "Megvalósítható: " << (havel_hakimi(sequence) ? "True" : "False") << endl;
return 0;
}
Kimenet:
Megvalósítható: True
A Havel-Hakimi-algoritmus egy hatékony eszköz annak eldöntésére, hogy egy fokszámsorozat megvalósítható-e egyszerű gráfként. Alkalmazásai közé tartozik a gráfok modellezése, hálózatelemzés és a gráfelméleti problémák vizsgálata. Egyszerűsége és intuitivitása miatt széles körben tanítják az algoritmusok és gráfelmélet kurzusokon.