# Grafo vaizdavimo kompiuteryje būdai I ### Gretimumo ir incidencijų matricos [![PDF](../slides_common/img/pdf.png)](./slides.pdf) Parengė Vytautas Strimaitis, PS 4 k.
## Grafo vaizdavimo būdų vertinimo kriterijai * Turime grafą $G = (V, U), |V| = n, |U| = m$. * Jį kompiuteryje galima atvaizduoti keliais skirtingais būdais. * Čia nagrinėjami būdai - gretimumo ir incidencijų matricos. * Būdai vertinami pagal šiuos kriterijus: 1. Vaizdavimui reikalingos atminties kiekis; 2. Galimybė padaryti klaidą; 3. Gretimų viršūnių išrinkimo sudėtingumas.

Gretimumo matrica

  • Grafo $G = (V, U)$ gretimumo matrica yra kvadratinė $n$-osios eilės matrica $ S = [s_{ij}], i \in \{ 1, ..., n \}, j \in \{ 1, ..., n \}.$
  • Jos elementas $s_{ij}$ apibrėžiamas taip: $$ s_{ij} = \begin{cases} 1, & (i, j) \in U, \\ 0, & (i, j) \notin U. \end{cases} $$
  • Vienetukų skaičius $i$-ojoje eilutėje lygus $i$-osios viršūnės:
    • laipsniui neorientuotojo grafo atveju;
    • išėjimo puslaipsniui orientuotojo grafo atveju.

Pavyzdys - neorientuotas grafas

| |1|2|3|4|5| |-----|-|-|-|-|-| |**1**|0|1|0|0|0| |**2**|1|0|1|1|0| |**3**|0|1|0|1|1| |**4**|0|1|1|0|0| |**5**|0|0|1|0|0|

Pavyzdys - orientuotas grafas

| |1|2|3|4|5| |-----|-|-|-|-|-| |**1**|0|1|0|0|0| |**2**|0|0|1|1|0| |**3**|0|0|0|1|1| |**4**|0|0|0|0|0| |**5**|0|0|0|0|0|

Pratimas

Sudarykite duotų grafų gretimumo matricas

Atsakymas

| |1|2|3|4|5|6| |-----|-|-|-|-|-|-| |**1**|0|1|1|0|1|0| |**2**|1|0|1|0|1|0| |**3**|1|1|0|1|0|0| |**4**|0|0|1|0|0|0| |**5**|1|1|0|0|0|0| |**6**|0|0|0|0|0|0|
| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|1| |**3**|0|0|0|1| |**4**|0|0|0|0|

Izomorfinių grafų gretimumo matricos

  • Du grafai vadinami izomorfiškais, jei galima pirmojo grafo viršūnes pernumeruoti taip, kad gautume antrąjį grafą.
  • Vieno grafo gretimumo matricą galimą transformuoti į kito paeiliui apkeitinėjant atitinkamas matricos eilutes ir stulpelius.
  • Tegu $\varphi(x)$ - bijekcija, iš pirmojo grafo viršūnių į antrojo. Tada, jei $\varphi(i) = k$ ir $\varphi(j) = i (i \neq j, i \neq k)$, tai galima apkeisti stulpelių ir eilučių poras $(i, j)$.
  • Taip gauname naują bijekciją $\varphi'(x)$, kurioje $\varphi'(i) = i, \varphi'(j) = k$.
  • Su šia nauja bijekcija vėl galima atlikinėti apkeitimo žingsnį kol gausime $\forall x \in V: \varphi(x) = x$.

Pavyzdys

| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|
| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|

Pavyzdys

| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|
| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|

Pavyzdys

| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|
| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|0|0|1|0| |**3**|1|1|0|1| |**4**|1|0|1|0|

Pavyzdys

| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|
| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|0|0|1|0| |**3**|1|1|0|1| |**4**|1|0|1|0|

Pavyzdys

| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|
| |1|2|3|4| |-----|-|-|-|-| |**1**|0|0|1|1| |**2**|0|0|1|0| |**3**|1|1|0|1| |**4**|1|0|1|0|

Pavyzdys

| |1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|
| |1|2|3|4| |-----|-|-|-|-| |**1**|0|0|1|1| |**2**|0|0|1|0| |**3**|1|1|0|1| |**4**|1|0|1|0|

Pratimas

Sudarykite pirmojo grafo gretimumo matricą. Tada transformuokite ją į antrojo grafo gretimumo matricą.

Atsakymas

|$S_1$|1|2|3|4| |-----|-|-|-|-| |**1**|0|1|1|0| |**2**|1|0|1|0| |**3**|1|1|0|1| |**4**|0|0|1|0|
|$S_2$|1|2|3|4| |-----|-|-|-|-| |**1**|0|1|0|1| |**2**|1|0|1|1| |**3**|0|1|0|0| |**4**|1|1|0|0|
Pirmojo grafo viršūnes galima pernumeruoti taip: $$ 1 \rightarrow 1, 2 \rightarrow 4, 3 \rightarrow 2, 4 \rightarrow 3. $$ Todėl galima apkeisti pirmosios matricos 2 ir 3 eilutes, 2 ir 3 stulpelius, 3 ir 4 eilutes bei 3 ir 4 stulpelius.

Įvertinimas

  • Reikalingas atminties kiekis. Gretimumo matricai saugoti reikia $n^2$ elementų, nors dažnai didžioji jų dalis būna nuliai.
  • Galimybė padaryti klaidą. Labai didelė esant dideliam viršūnių skaičiui. Nelabai aktualu rašant programą.
  • Gretimų viršūnių radimas. Norint rasti viršūnes, gretimas $i$-ajai viršūnei, reikia nuskenuoti visą $i$-ąją gretimumo matricos eilutę ir rasti tokius $j$, kad $s_{ij} = 1$. Sudėtingumas $O(n)$.
  • Išvada. Dažniausiai gretimumo matrica turi daugiau teorinę nei praktinę reikšmę. Tačiau ši struktūra gali būti naudinga, kuomet sprendžiamas uždavinys, kuriame:
    • Viršūnių skaičius nėra labai didelis;
    • Grafas yra tankus, t.y. turi daug briaunų.

Incidencijų matrica

  • Grafo $G = (V, U)$ incidencijų matrica yra stačiakampė $(n \times m)$ formato matrica $ A = [a_{ij}], i \in \{ 1, ..., n \}, j \in \{ 1, ..., m \}. $
  • Jos elementas $a_{ij}$ neorientuotojo grafo atveju apibrėžiamas taip: $ a_{ij} = \begin{cases} 1, & U_j = (i, k) \lor U_j = (k, i), k \in V, \\ 0, & \text{kitu atveju}. \end{cases} $
  • Orientuotojo grafo atveju: $ a_{ij} = \begin{cases} 1, & U_j = (i, k), k \in V, \\ -1, & U_j = (k, i), k \in V, \\ 0, & \text{kitu atveju}. \end{cases} $

Pavyzdys - neorientuotas grafas

| |1|2|3|4|5|6| |-----|-|-|-|-|-|-| |**1**|1|0|0|0|0|1| |**2**|1|1|1|0|0|0| |**3**|0|1|0|1|1|0| |**4**|0|0|1|1|0|0| |**5**|0|0|0|0|1|1|

Pavyzdys - orientuotas grafas

| |1|2|3|4|5|6| |-----|-|-|-|-|-|-| |**1**|1|0|0|0|0|-1| |**2**|-1|1|1|0|0|0| |**3**|0|-1|0|1|1|0| |**4**|0|0|-1|-1|0|0| |**5**|0|0|0|0|-1|1|

Pratimas

Sudarykite duotųjų grafų incidencijų matricas.

Atsakymas

| |1|2|3|4|5|6| |-----|-|-|-|-|-|-| |**1**|1|1|0|1|0|0| |**2**|1|0|0|0|1|1| |**3**|0|1|1|0|0|1| |**4**|0|0|1|0|0|0| |**5**|0|0|0|1|1|0| |**6**|0|0|0|0|0|0|
| |1|2|3|4|5| |-----|-|-|-|-|-| |**1**|0|0|1|0|-1| |**2**|0|1|0|1|1| |**3**|1|-1|-1|0|0| |**4**|-1|0|0|-1|0|

Įvertinimas

  • Reikalingas atminties kiekis. Incidencijų matricai saugoti reikia $n \cdot m$ elementų, nors dažnai didžioji jų dalis būna nuliai.
  • Galimybė padaryti klaidą. Labai didelė prie didesnių $n$ ir $m$ reikšmių. Nelabai aktualu rašant programą.
  • Gretimų viršūnių radimas. Norint rasti viršūnes, gretimas $i$-ajai viršūnei, reikia nuskenuoti visą $i$-ąją incidencijų matricos matricos eilutę ir rasti tokius $j$, kad $a_{ij} = 1$. Kiekvienam tokiam $j$ tada reikia rasti visus $k$ tokius, kad $a_{kj} = 1$ ($-1$ orientuoto grafo atveju). Sudėtingumas $O(n \cdot m)$
  • Išvada. Incidencijų matrica yra dar blogesnis grafo vaizdavimo būdas nei gretimumo matrica. Pritaikymas labiau teorinis nei praktinis.
## Apibendrinimas * Gretimumo matrica kiekvienai **viršūnių porai** nusako, ar jos gretimos. * Incidencijų matrica kiekvienai **viršūnės ir briaunos porai** nusako, ar viršūnė incidentiška briaunai. * Vaizduojant grafą abiem būdais reikia daug atminties, gretimų viršūnių paieška nėra efektyvi. Todėl abu būdai praktikoje dažniausiai nenaudojami.