Gráfok kódolása szomszédsági mátrixszal és mátrixhatványozás



Alapkérdés: Adott egy egyszerű gráf. Döntsük el összefüggő-e.

Egy egyszerű gráf AG szomszédsági mátrixának elemeit másképpen is értelmezhetjük. Egy u csúcs sorának és egy v csúcs oszlopának találkozásánál álló pozícióban az u-ból v-be vezető 1 hosszú séták száma áll. Ez az értelmezés első hallásra furcsa. A későbbiek azonban magyarázatot adnak erre az értelmezésre.

Definiálhatunk egy furcsa PG mátrixot is. Ennek sorai és oszlopai is gráfunk csúcsaival vannak azonosítva. A PG(u,v) elem az uv élen való átlépéssel megtett séta által alkotott halmaz, ha u és v szomszédos, illetve az üreshalmaz különben. Azaz PG elemei halmazok. PG már nem szimmetrikus mátrix. u és v szomszédossága esetén a PG(u,v) elem és a PG(v,u) elem is egy-egy egyelemű halmaz, de a két elem különböző iráyú séta. Az AG mátrix ezen PG mátrixot mossa el úgy, hogy a megfelelő elem helyén csak a PG-ben szereplő halmaz elemszámát tünteti fel. ``A PG-ben szereplő séták egyénisége eltűnik, egy statisztikában szereplő vonássá válnak.''

Mi lesz AG2, azaz a szomszédsági mátrix négyzetének egy eleme, mondjuk u sorának és v oszlopának talákozásánal álló AG2(u,v) elem? A mátrix szorzás definíciója alapján (AG2 az AG és AG mátrixok szorzata) ez +{AG(u,w)AG(w,v): w a G gráf csúcsa}. Az összeg tagjai 0.0, 0.1, 1.0 és 1.1 szorzatok, azaz maguk is 0-k vagy 1-esek. Így összegük megegyezik az 1 tagok számával, ami azon w csúcsok száma, amelyekre AG(u,w) és AG(w,v) is 1, azaz u és w, illetve w és v is szomszédos. Az ilyen w-k természetes módon azonosíthatók a 2 hosszú uv séták számával. Azaz ``AG2 elemei a gráfban lévő 2 hosszú sétákat számolják meg''.

A PG mátrixunkat is szorozhatjuk önamagával, ha jól állunk hozzá. PG elemei sétahalmazok. Ha egy s és s' olyan, hogy s végpontja egybeesik s' kezdőpontjával, akkor szorzatukat definiálhatjuk mint azt a sétát, amit úgy kapunk, hogy s bejárása után s'-t is bejárjuk (ezt nevezhetjük konkatenációjuknak, habár a szavaknál megszokott fogalomtól eltérünk, a két sorozatot nem egyszerűen egymásután írjuk, az első sorozat utolsó elemét (s végpontját) és a második sorozat első elemét (s' kezdőpontját) azonosítjuk). Két sétahalmaz - S és S' - szorzata alatt egy S-beli és egy S'-beli séta szorzataként előálló séták halmazát értjük (feltéve, hogy a megfelelő sétaszorzatok értelmezettek). Két sétahalmaz S és S' összege alatt uniójukat értjük. Így ha két mátrix szorzatának definíciójára ránézünk, akkor az ott szereplő szorzat és összeg értelmet nyer akkor is, ha sétahalmazok az elemek. Ez alapján PG.PG értelmezhető. Elemei a megfelelő két csúcs közötti kettő hosszú séták Az AG.AG mátrix ezen PG.PG mátrixot mossa el úgy, hogy a megfelelő elem helyén csak a PG.PG-ben szereplő halmaz elemszámát tünteti fel. ``A PG.PG-ben szereplő séták egyénisége eltűnik, egy statisztikában szereplő vonássá válnak.''

Tovább is léphetünk. Mi lesz AG3, azaz a szomszédsági mátrix köbének egy eleme, mondjuk u sorának és v oszlopának talákozásánal álló AG3(u,v) elem? A mátrix szorzás definíciója alapján (AG3 az AG és AG2 mátrixok szorzata) ez +{AG(u,w)AG2 (w,v): w a G gráf csúcsa}. Vegyük az u-ból v-be vezető három hosszú sétákat. Ezeket csoportosíthatjuk a séta második csúcsa szerint. Ha ez a csúcs w, akkor éppen AG(u,w)AG2 darab sétánk van. Így AG3 elemei az adott végpontú három hosszú séták számait adja meg.

PG3 elemei az adott végpontú három hosszú sétahalmazok lesznek. AG3 elemei ezeket a halmazokat mossák el csupán elemszámuk nyilvántartásával.

Általában PGk elemei az adott végpontú k hosszú sétahalmazok lesznek. AGk elemei ezeket a halmazokat mossák el csupán elemszámuk nyilvántartásával.


A fenti megjegyzés mellett egy gráfelméleti észrevételre lesz szükségünk az algoritmusunk tervezéséhez.

u és v egy gráf két különböző csúcsa. A következők ekvivalensek

Bizonyítás: Az egyetlen problémás lépéshez azt kell észrevennünk, hogy egy séta hossza a séta utolsó lépésének oda-vissza ismételgetésével tetszőleges páros számmal növelhető.
Az alapproblémára (Adott AG. Döntsuk el G tetszőleges két különböző csúcs között van-e séta) a következő algoritmust adhatjuk:
A fenti magas szintű leírás nem ad egy programot. Egy konkrét program megírásához (implementációhoz) esetleg komoly ötletekre van szükség. Az első lépés is problémás. Hogyan számolható ki AG|V|-2 és AG|V|-1, azaz általában adott N-re AGN.

A helyes implementáció:

Mi lett volna a naív implementáció? Hány szorzást használ az az algoritmus?

Egy további ötlet a gyakorlati programozónak. AGN séták számát tárolja. Ez nem kell nekünk. Mi csak a séta létezésére vagyunk kiváncsiak.

Vezessünk be egy BG mátrixot, aminek elemei az AG mátrixból kapjuk az 1-esek helyett `true ', a 0-k helyett `false ' Boole-értéket véve. Tehát a BG mátrix a PG mátrix elemeit ``mossa tovább'', csupán azt a minimumot hagyja meg, ami algoritmusunk számára szükséges. Ha ezek után Boole-aritmetikával (+ <- `vagy', .<- `és') számolunk, akkor éppen a szükséges információt kapjuk meg.

A Boole-aritmetikában való számolás gyorsabb mint a nagy egészekkel való számolás, a Boole-értékek jóval kisebb helyet foglalnak el a memóriában mint a nagy egészek.