Gráfok és szélességi és mélységi bejárás

  • Informatika
  • BFS algoritmus magyarázat
  • DFS algoritmus működése
  • Gráf bejárási algoritmusok
  • Szélességi bejárás példa
  • Mélységi bejárás példa
  • Gráfok reprezentációja

Podcast

Gráf algoritmusok: Térképektől a közösségi hálókig0:00 / 12:29
0:001:00 remaining

A gráfelmélet a matematika és a számítástudomány egyik sarokköve, amely struktúrák közötti kapcsolatokat vizsgál. Két alapvető elemből épül fel: a csúcsokból (pontok, amik az elemeket reprezentálják) és az élekből (vonalak, amik a csúcsok közötti kapcsolatokat jelölik).

Ez az összefoglaló mélyrehatóan bemutatja a gráfok alapfogalmait és két kulcsfontosságú bejárási algoritmust: a szélességi és mélységi bejárást (BFS és DFS). Célunk, hogy a Gráfok és szélességi és mélységi bejárás témáját mindenki számára érthetővé tegyük, aki az érettségi vagy egyetemi tanulmányok során találkozik vele.

Gráfok alapjai és fogalomtára

Ahhoz, hogy megértsük a gráfbejárási algoritmusokat, először tisztában kell lennünk a gráfok felépítésével és terminológiájával. A gráfok rengeteg valós problémát modelleznek, legyen szó közlekedési hálózatokról, közösségi médiáról vagy útvonaltervezésről.

Gráfok főbb típusai és jellemzői

  • Csúcs (Vertex/Node): A gráf alapegysége, pontként ábrázoljuk.
  • Él (Edge): Két csúcs közötti kapcsolat, vonallal jelöljük.
  • Irányítatlan gráf: Az éleknek nincs irányuk. Ha A és B között van él, az oda-vissza kapcsolatot jelent (pl. barátságok egy közösségi hálózaton).
  • Irányított gráf (Digraph): Az éleknek van irányuk. Ha A-ból B-be van él, az nem jelenti automatikusan a B-ből A-ba vezető utat (pl. egyirányú utca, követés a Twitteren).
  • Súlyozatlan gráf: Az élekhez nem tartozik érték. Minden él "egy egységnyi" távolságnak vagy költségnek számít.
  • Súlyozott gráf: Az élekhez numerikus érték (súly) tartozik, ami reprezentálhat távolságot, időt, költséget (pl. úthálózatban a utak hossza).
  • Szomszédos csúcsok: Két csúcs szomszédos, ha él köti össze őket.
  • Fokszám (Degree): Egy csúcsba befutó és kifutó élek száma. Irányított gráfoknál megkülönböztetjük a bemenő (in-degree) és kimenő (out-degree) fokszámot.

Gráfok reprezentációja: Szomszédsági mátrix és Szomszédsági lista

A gráfok számítógépes tárolására két fő módszer létezik. Mindkettőnek megvannak a maga előnyei és hátrányai a hatékonyság szempontjából.

1. Szomszédsági mátrix (Adjacency Matrix)

  • Felépítés: Egy V × V méretű mátrix (ahol V a csúcsok száma). Az M[i][j] elem 1 (vagy az él súlya), ha van él az i-edik csúcsból a j-edik csúcsba, egyébként 0.
  • Előnyök: Gyorsan ellenőrizhető, hogy két csúcs között van-e él (O(1) idő). Egyszerű implementálni.
  • Hátrányok: Nagy térigény (O(V²) memória), különösen ritka gráfok esetén (kevés él). Egy csúcs szomszédainak lekérdezése O(V) időt vesz igénybe.

2. Szomszédsági lista (Adjacency List)

  • Felépítés: Egy tömb, ahol minden elem egy lista. A tömb i-edik eleme az i-edik csúcs összes szomszédját tartalmazza. Súlyozott gráfoknál az él súlyát is tárolja.
  • Előnyök: Kisebb térigény ritka gráfok esetén (O(V + E) memória). Egy csúcs szomszédainak lekérdezése hatékony (O(fokszám) idő).
  • Hátrányok: Annak ellenőrzése, hogy két csúcs között van-e él, O(fokszám) időt vehet igénybe.

Check what you already know

Test · 20 questions · first 3 free

Question 1 of 30%

A szélességi bejárás (BFS) algoritmus mindig megtalálja a legrövidebb utat súlyozott gráfokban is.

Practise it with flashcards

16 cards · first 3 free, no account

1 / 16

Mely két alapvető elemből áll egy gráf?

Csúcsokból (V, vertices) és élekből (E, edges).

Tap to flip · Swipe to navigate

Gráfbejárási Algoritmusok részletes elemzése

A gráfbejárási algoritmusok célja, hogy egy gráf összes csúcsát és élét szisztematikusan bejárják. Ezek alapvető fontosságúak számos probléma megoldásához, mint például elérhetőség vizsgálata, összefüggő komponensek keresése, ciklusok detektálása vagy a legrövidebb út megtalálása súlyozatlan gráfokban.

Két fő típusa van: a szélességi bejárás (BFS) és a mélységi bejárás (DFS).

Szélességi Bejárás (BFS – Breadth-First Search) működési elve és példa

A szélességi bejárás egy rétegenkénti bejárási stratégia. Egy adott kezdőcsúcstól kiindulva először annak közvetlen szomszédait látogatja meg, majd azokat a szomszédokat, amiknek a közvetlen szomszédjai még nincsenek felkeresve és így tovább. Ezzel biztosítja, hogy súlyozatlan gráfokban megtalálja a legrövidebb utat élszámban mérve.

Működési elv:

A BFS egy sor (queue) adatszerkezetet használ, amely FIFO (First-In, First-Out) elven működik.

Algoritmus lépései:

  1. Hozzon létre egy üres sort (Q) és egy látogatott jelölést minden csúcsra (hamis).
  2. Válasszon egy kezdőcsúcsot (S). Jelölje S-t látogatottnak, és tegye be a sorba.
  3. Amíg a sor nem üres: a. Vegye ki a sor elején lévő csúcsot (U). b. Vizsgálja meg U összes szomszédját (V). c. Ha egy szomszédos csúcs (V) még nem volt látogatott: i. Jelölje V-t látogatottnak. ii. Tegye be V-t a sorba.

Példa szélességi bejárásra:

Tekintsük az alábbi gráfot: Csúcsok: A, B, C, D, E, F. Élek: (A,B), (A,C), (B,D), (C,E), (D,F), (E,F). Kezdőcsúcs: A.

  1. Sor = [], Látogatott = {A:hamis, B:hamis, C:hamis, D:hamis, E:hamis, F:hamis}
  2. Látogatott[A] = igaz. Sor = [A].
  3. Kivesz: A. (Feldolgozott sorrend: A)
  • A szomszédai: B, C.
  • B nem látogatott: Látogatott[B]=igaz, Sor=[B].
  • C nem látogatott: Látogatott[C]=igaz, Sor=[B, C].
  1. Kivesz: B. (Feldolgozott sorrend: A, B)
  • B szomszédai: A, D.
  • A látogatott.
  • D nem látogatott: Látogatott[D]=igaz, Sor=[C, D].
  1. Kivesz: C. (Feldolgozott sorrend: A, B, C)
  • C szomszédai: A, E.
  • A látogatott.
  • E nem látogatott: Látogatott[E]=igaz, Sor=[D, E].
  1. Kivesz: D. (Feldolgozott sorrend: A, B, C, D)
  • D szomszédai: B, F.
  • B látogatott.
  • F nem látogatott: Látogatott[F]=igaz, Sor=[E, F].
  1. Kivesz: E. (Feldolgozott sorrend: A, B, C, D, E)
  • E szomszédai: C, F.
  • C látogatott.
  • F látogatott.
  1. Kivesz: F. (Feldolgozott sorrend: A, B, C, D, E, F)
  • F szomszédai: D, E.
  • D látogatott.
  • E látogatott.
  1. A sor üres. Az algoritmus véget ér.

Tulajdonságok és komplexitás:

  • Legrövidebb út: Súlyozatlan gráfokban garantáltan megtalálja a legrövidebb utat élszámban mérve.
  • Időkomplexitás: O(V + E), ahol V a csúcsok, E az élek száma.
  • Térkomplexitás: O(V), mivel a sorban legfeljebb az összes csúcs tárolódhat.

Mélységi Bejárás (DFS – Depth-First Search) alkalmazásai és példa

A mélységi bejárás a lehető legmélyebbre hatol egy ágon, mielőtt visszalépne és egy másik ágat vizsgálná. Ez egy "mélyre ugrás" stratégia.

Működési elv:

A DFS vagy egy verem (stack) adatszerkezetet használ (LIFO – Last-In, First-Out), vagy rekurzív módon valósul meg, implicit módon használva a hívási vermet.

Algoritmus lépései (rekurzív megvalósítással):

  1. Hozzon létre egy látogatott jelölést minden csúcsra (hamis).
  2. Definiáljon egy DFS(csúcs) függvényt: a. Jelölje csúcs-ot látogatottnak. b. Feldolgozza csúcs-ot. c. Minden olyan szomszédos csúcsra (V), amely még nem volt látogatott, hívja meg rekurzívan a DFS(V) függvényt.
  3. Hívja meg a DFS(kezdőcsúcs) függvényt.

Példa mélységi bejárásra (rekurzív):

Tekintsük ugyanazt a gráfot: Csúcsok: A, B, C, D, E, F. Élek: (A,B), (A,C), (B,D), (C,E), (D,F), (E,F). Kezdőcsúcs: A. A szomszédsági lista (lexikografikus sorrendben): A: [B, C], B: [A, D], C: [A, E], D: [B, F], E: [C, F], F: [D, E].

  1. Látogatott = {A:hamis,..., F:hamis}
  2. Hívás: DFS(A) a. Látogatott[A] = igaz. (Feldolgozott sorrend: A) b. A szomszédai: B, C. c. Hívás: DFS(B) (B nem látogatott) i. Látogatott[B] = igaz. (Feldolgozott sorrend: A, B) ii. B szomszédai: A, D. iii. A látogatott. iv. Hívás: DFS(D) (D nem látogatott)
  3. Látogatott[D] = igaz. (Feldolgozott sorrend: A, B, D)
  4. D szomszédai: B, F.
  5. B látogatott.
  6. Hívás: DFS(F) (F nem látogatott) a. Látogatott[F] = igaz. (Feldolgozott sorrend: A, B, D, F) b. F szomszédai: D, E. c. D látogatott. d. Hívás: DFS(E) (E nem látogatott) i. Látogatott[E] = igaz. (Feldolgozott sorrend: A, B, D, F, E) ii. E szomszédai: C, F. iii. C nem látogatott. Hívás: DFS(C)
  7. Látogatott[C] = igaz. (Feldolgozott sorrend: A, B, D, F, E, C)
  8. C szomszédai: A, E.
  9. A látogatott. E látogatott.
  10. DFS(C) visszatér. iv. F látogatott. v. DFS(E) visszatér. e. DFS(F) visszatér.
  11. DFS(D) visszatér. v. DFS(B) visszatér. d. C látogatott (már az E ágon keresztül). e. DFS(A) visszatér.

Tulajdonságok és komplexitás:

  • Alkalmazások: Ciklusok detektálása, topologikus rendezés (irányított körmentes gráfokban), összefüggő komponensek keresése, labirintusok megoldása.
  • Időkomplexitás: O(V + E).
  • Térkomplexitás: O(V), a rekurziós verem vagy explicit verem mérete miatt.

Gráfbejárási módszerek összehasonlítása és tipikus hibák

BFS és DFS: Miben különböznek és mikor melyiket használjuk?

A szélességi és mélységi bejárás közötti különbségek alapvetőek az algoritmusok kiválasztásánál.

JellemzőSzélességi Bejárás (BFS)Mélységi Bejárás (DFS)
AdatszerkezetSor (Queue)Verem (Stack) vagy Rekurzió
Bejárási sorrendRétegenként, a kezdőponthoz közelebbiek előbbMélységben, amíg el nem éri a végpontot vagy zsákutcát
Legrövidebb útMegtalálja a legrövidebb utat (élszámban) súlyozatlan gráfokbanNem garantálja a legrövidebb utat
AlkalmazásokLegrövidebb út, hálózati sugárzás, komponensek kereséseCiklusdetektálás, topologikus rendezés, elérhetőség vizsgálat, labirintusok megoldása
IdőkomplexitásO(V + E)O(V + E)
TérkomplexitásO(V)O(V)

Fontos megjegyezni, hogy a BFS egyedülállóan alkalmas a legrövidebb út megtalálására súlyozatlan gráfokban, ha az út hossza az élek számában van mérve. Súlyozott gráfok esetén más algoritmusokra, például a Dijkstra-algoritmusra van szükség.

Gyakori hibák és tévhitek a gráfbejárás során

Érettségi és egyetemi vizsgákon gyakran előforduló hibák elkerülése érdekében érdemes odafigyelni a következőkre:

  1. Látogatott csúcsok jelölésének hiánya: Ez végtelen ciklusokhoz vezethet, különösen ciklikus gráfokban, vagy többszörös feldolgozáshoz, ami hibás eredményt és rossz teljesítményt okoz.
  2. Összefüggő és nem összefüggő gráfok: Ha egy gráf nem összefüggő, a bejárás csak az adott kezdőcsúccsal összefüggő komponenst járja be. Az összes csúcs bejárásához szükség lehet arra, hogy minden nem látogatott csúcsból újraindítsuk a bejárást.
  3. Irányított gráfok kezelése: Irányított gráfok esetén figyelni kell az élek irányára. A szomszédos csúcsok csak azok, amelyekbe az aktuális csúcsból él vezet. Az elérhetőség és az utak értelmezése eltér az irányítatlan gráfokétól.
  4. Súlyozott gráfok és legrövidebb út: Súlyozott gráfokban a BFS nem találja meg a legrövidebb utat, ha az élsúlyok eltérőek. Ebben az esetben más algoritmusok alkalmazása szükséges.

Gyakran Ismételt Kérdések a gráfbejárásról

Melyik algoritmus (BFS vagy DFS) a jobb a legrövidebb út megtalálására súlyozatlan gráfokban?

Súlyozatlan gráfokban a BFS (szélességi bejárás) a garantáltan legjobb algoritmus a legrövidebb út megtalálására élszámban mérve. Mivel rétegenként halad, mindig az elsőként elért útvonal lesz a legrövidebb.

Hogyan lehet felismerni a ciklusokat egy gráfban?

A DFS (mélységi bejárás) ideális ciklusok detektálására. Ha a DFS során egy már látogatott, de még nem teljesen feldolgozott (azaz még a rekurziós veremben lévő) csúcsra találunk, az ciklust jelez.

Milyen adatszerkezetet használ a BFS és a DFS?

A BFS egy sort (queue) használ, ami First-In, First-Out (FIFO) elven működik. A DFS pedig egy vermet (stack) használ, ami Last-In, First-Out (LIFO) elven működik, vagy rekurzióval valósul meg, ami implicit módon a hívási vermet használja.

Mi a különbség egy irányított és egy irányítatlan gráf között?

Egy irányított gráfban az éleknek van irányuk, azaz egy él A-ból B-be nem feltétlenül jelent utat B-ből A-ba. Egy irányítatlan gráfban az éleknek nincs irányuk, tehát ha A és B között van él, az mindkét irányba járható kapcsolatot jelent.

Mikor kell újraindítani egy gráfbejárást?

Ha a gráf nem összefüggő, azaz több különálló részből áll, akkor egyetlen kezdőcsúcsból indított bejárás csak az adott komponenst fedi le. Az összes csúcs bejárásához szükséges, hogy minden eddig nem látogatott csúcsból újraindítsuk a bejárási algoritmust.

Practise it, don't just read it

16 flashcards, a test with explanations and a podcast for this topic. The account is free and you pick up right where you left off.

  • No credit card
  • Web and mobile app
  • 330,000+ students
Start for free

Related topics