Grafas (matematika)

: *Duomenų struktūra „grafas“ aprašyta straipsnyje [[grafas (duomenų struktūra)]]*
Matematikoje, tiksliau grafų teorijoje, **grafas** – abstrakti struktūra aprašantį rinkinį objektų, kuriame kai kurios poros susietos ryšiais. Objektus abstrakčiai aprašantys elementai vadinami *viršūnėmis* (angl. *vertex*, dgs. vertices), kartais – *mazgais* (angl. *node*) arba *taškais* (angl. *points*). Susietos poros vadinamos *briaunomis*, kartais – *ryšiais* (angl. *link*) arba *linijomis* (angl. *line*)*.* Plokštumoje grafo viršūnės dažnai vaizduojamos taškais ar kitais paprastomis geometrinėmis figūromis, o briaunos – kreivėmis arba atkarpomis, jungiančiomis tuos taškus. Briaunos gali būti neorientuotos arba orientuotos (pastaruoju atveju jos dažnai vaizduojamos rodyklėmis).

Neorientuoto grafo pavyzdžiu gali būti grupė žmonių, kurioje briauna sujungiame kiekvieną porą žmonių pažįstančių vienas kitą. Kadangi pažintis yra simetriškas sąryšis (žmogus A pažįsta žmogų B tada ir tik tada, kai žmogus B pažįsta žmogų A), šis grafas yra neorientuotas. Kita vertus, jei briaunomis laikytume sutvarkytas poras (A,B), kur žmogus A yra skolingas žmogui B, gautume orientuotą grafą, kadangi iš to, kad A skolingas žmogui B, neišplaukia, jog B skolingas žmogui A.

## Grafų apibrėžimai

Abstrakčiai grafas apibrėžiamas kaip pora G = (V,E), kur V – kokia nors aibė, o E – aibės *<math>V</math>* elementų porų aibė. Aibės *<math>V</math>* elementai vadinami grafo *G* **viršūnėmis**, o aibės E elementai – **briaunomis**.

Dažnai naudinga briaunoms priskirti kryptis, t. y., briauną \{u,v\} pakeisti sutvarkyta pora (u,v), kurią vadiname *lanku* (angl. *arc*). Šiuo atveju gauname struktūrą vadinamą **orientuotuoju grafu** arba **digrafu**.

Grafo sąvoką galima apibendrinti leidžiant kartotines briaunas. **Multigrafu vadinama pora <math>G = (V,E)</math>**, kur E yra *<math>V</math>* elementų porų *multiaibė*. Analogiškai G = (V,A) yra **multidigrafas**, jei *<math>A</math>* yra sutvarkytų porų iš *<math>V</math>* multiaibė.

Galiausiai, kai kada patogu leisti briaunas ar lankus kurie jungia viršūnę su pačia savimi. Formaliai, šiuo atveju leidžiama briaunas pavidalo \{v,v\} ir lankus pavidalo (v,v). Tokias briaunas ir lankus vadiname **kilpomis**, o (di)grafus, kuriuose leidžiamos kilpos vadiname (di)grafais su kilpomis (angl. *looped (di)graph, (di)graph with loops*).

**Svoriniu grafu** vadinamas toks grafas, kurio kiekvienai briaunai priskirta kažkokia skaitinė reikšmė (svoris).

## Terminai

Dvi grafo viršūnės vadinamos **gretimomis** (angl. *adjacent*), kai jas jungia briauna. Turėdami briauną \{u,v\} \in E , sakome, kad viršūnės u ir v **incidenčios** (angl. *incident*) briaunai \{u,v\}.

(Multi)grafo viršūnės v **laipsnis** (angl. *degree*), žymimas \deg_G(v), yra briaunų, incidenčių viršūnei v, skaičius. Digrafe G=(V,A) **išėjimo laipsniu** (angl. *out-degree*) \deg^+_G(v) vadinamas skaičius lankų vedančių iš v (t. y., (v,u)\in A); analogiškai **įėjimo laipsniu** (angl. *in-degree*) \deg^-_G(v) vadinamas skaičius lankų vedančių į v (t. y., (u,v)\in A). Grafas vadinamas **reguliariuoju** (angl. *regular*), jei jo visų viršūnių laipsniai yra lygūs.

**Keliu** (angl. *walk*) (multi)grafe vadinama seka v_0, e_1, v_1, \dots, e_n, v_n , kurioje v_0, \dots, v_n yra viršūnės, o e_1, \dots, e_n yra briaunos, kur briauna e_i jungia viršūnes v_{i-1} ir v_i (jei digrafe reikalaujame, kad e_i yra lankas iš v_{i-1} į v_i, tokį kelią vadiname **orientuotuoju keliu**, angl. *oriented walk*). Jei grafe nėra kartotinių briaunų, kiekvieną kelią vienareikšmiškai apibrėžia viršūnių seka v_0, \dots, v_n. Kelias, kuriame nesikartoja briaunos, vadinamas **grandine** (angl. *trail*). Grandinė, kurioje nesikartoja viršūnės, vadinama **taku** (angl. *path*).

Grafas G' = (V',E') vadinamas grafo G = (V,E) **pografiu** (angl. *subgraph*), jei V' \subseteq V ir E' \subseteq E. Pografį G' vadiname **indukuotuoju**, (angl. *induced*) jei į E' įeina visos grafo G = (V,E) briaunos jungiančios aibės V' elementus. Kadangi kiekvieną indukuotą pografį vienareikšmiškai apibrėžia jo viršūnių aibė V', todėl indukuotą pografis su viršūnių aibe V' žymime G[V'].

Neorientuotas grafas yra **jungus** (angl. *connected*), jei kiekvieną porą skirtingų viršūnių u, v jungia kelias (pastebėkime, kad grafas su viena viršūne taip pat yra jungus). Bet kurio grafo G viršūnių aibę galima vieninteliu būdu išskaidyti į netuščias aibes V_1, \dots, V_n taip, kad pografiai G[V_1], \dots, G[V_n] būtų jungūs. Šie pografiai vadinami grafo G **jungiosiomis komponentėmis.**

Jei digrafe kiekvienai skirtingų viršūnių porai u, v egzistuoja orientuotas kelias iš u į v, toks digrafas vadinamas **stipriai** **jungiuoju** (angl. *strongly connected*).

Viršūnių aibė U \subseteq V vadinama **nepriklausoma** (angl. independent) arba **stabilia** (angl. stable), jei tarp viršūnių U nėra briaunų (t. y. G[U] briaunų skaičius lygus 0). Neorientuotasis grafas vadinamas **dvidaliu** (angl. *bipartite*), jei jo viršūnių aibę galima išskaidyti į dvi nepriklausomas aibes V_1, V_2. Bendriau, kiekvienam k \ge 2 grafas vadinamas k-**daliu** (angl. k-*partite*), jei jei jo viršūnių aibę galima išskaidyti į nepriklausomas aibes V_1, \dots, V_k.

## Šaltiniai