Erdős-Pósa-tétel (matematika, gráfelmélet) Az Erdős-Pósa-tétel kimondja, hogy létezik egy f(k) függvény, hogy minden k pozitív egész számra minden gráf vagy tartalmaz k csúcsdiszjunkt kört, vagy f(k) méretű körlefogó csúcshalmazt, ami a gráf minden köréből tartalmaz csúcsot.
Az **Erdős–Pósa-tétel** egy alapvető állítás a kombinatorikus gráfelméletben, amely kapcsolatot teremt a gráfban található páronként diszjunkt körök száma és egy minimális csúcspár-foglalat mérete között. A tétel kimondja:
> Egy gráfban vagy található páronként diszjunkt kör, vagy van egy legfeljebb méretű csúcshalmaz, amely lefedi az összes kört.
Itt egy konstans, amely a gráftól függ.
- Egy kör egy olyan zárt út, amelyben minden él és csúcs csak egyszer szerepel.
- A körök diszjunktak, ha nincs közös csúcsuk.
- Egy csúcshalmaz, amelynek eltávolításával a gráfból az összes kör megszűnik.
- páronként diszjunkt kör létezik. - Egy csúcshalmaz eltávolításával az összes kör megszűnik, és .
- A tétel egyensúlyt teremt a diszjunkt körök száma és a lefedéshez szükséges minimális csúcshalmaz mérete között.
- Kontrahálások és szétszakítások:
- Egy gráf kontrahálásával (élek összevonásával) és csúcsok eltávolításával csökkenthető a bonyolultság.
- Diszjunkt körök keresése:
- Az -diszjunkt körök megtalálása iteratív algoritmusokkal lehetséges.
- Ha diszjunkt kör nem található, akkor létezik egy lefedő csúcshalmaz. - A csúcshalmaz méretét a gráf struktúrája és a tételben szereplő konstans határozza meg.
- A lefedésre szánt csúcshalmaz iteratív módon konstruálható:
- Minden lépésben eltávolítjuk az aktuális körhöz tartozó csúcsokat. - Ez biztosítja, hogy a fennmaradó gráfban ne legyenek körök.
- Az -diszjunkt kör vagy lefedő csúcshalmaz mindig létezik. - A lefedés mérete a gráf tulajdonságaitól függően -nél nem lehet nagyobb.
Egy egyszerű gráf:
- és két diszjunkt kör.
- lefedi mindkét kört.
- diszjunkt kör található. - A lefedő halmaz , amely kielégíti a tétel feltételeit.
import networkx as nx
def find_disjoint_cycles(graph, k):
"""
Diszjunkt köröket keres a gráfban.
Args:
graph: A NetworkX gráf objektuma.
k: A keresett diszjunkt körök száma.
Returns:
list: A talált diszjunkt körök listája.
"""
cycles =
for cycle in nx.simple_cycles(graph):
if all(set(cycle).isdisjoint(set(c)) for c in cycles):
cycles.append(cycle)
if len(cycles) == k:
break
return cycles
def cover_set(graph):
"""
Lefedő csúcshalmazt keres, amely minden kört lefed.
Args:
graph: A NetworkX gráf objektuma.
Returns:
set: A lefedő csúcshalmaz.
"""
covering_set = set()
while True:
try:
cycle = next(nx.simple_cycles(graph))
covering_set.update(cycle)
graph.remove_nodes_from(cycle)
except StopIteration:
break
return covering_set
# Példa gráf
G = nx.DiGraph()
edges =
G.add_edges_from(edges)
# Keresés
k = 2
disjoint_cycles = find_disjoint_cycles(G.copy(), k)
print("Diszjunkt körök:", disjoint_cycles)
cover = cover_set(G.copy())
print("Lefedő csúcshalmaz:", cover)
Diszjunkt körök: , ] Lefedő csúcshalmaz: {'A', 'B', 'C', 'D', 'E'}
Az **Erdős–Pósa-tétel** az egyik legfontosabb összefüggést adja a diszjunkt körök és lefedő csúcshalmazok között a gráfelméletben. A tétel nemcsak elméleti jelentőséggel bír, hanem széles körben alkalmazható a hálózatok és kombinatorikus optimalizáció területén. Python segítségével a tételhez kapcsolódó algoritmusok egyszerűen implementálhatók.