graph traversal (tsz. graph traversals)
A graph traversal (gráf bejárás) az a folyamat, amely során egy gráf csúcsait és éleit módszeresen végigjárjuk, egy vagy több kiindulópontból. A gráfbejárás központi technika a számítástudományban, különösen gráfalgoritmusok, hálózatelemzés, útvonal-keresés, és komponens-felderítés során.
Egy gráf formálisan:
ahol:
A DFS a lehető legmélyebbre halad a gráfban, mielőtt visszalépne.
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
for neighbor in graph:
if neighbor not in visited:
dfs(graph, neighbor, visited)
return visited
A BFS minden szintet teljesen bejár, mielőtt mélyebbre lépne.
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque()
while queue:
node = queue.popleft()
for neighbor in graph:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
return visited
Adjunk meg egy gráfot szótárként:
graph = {
'A': ,
'B': ,
'C': ,
'D': ,
'E': ,
'F':
}
Bejárás típusa | Cél |
---|---|
DFS | Mélységi keresés, cikluskeresés, komponensek |
BFS | Szintenkénti bejárás, legrövidebb utak |
Topologikus bejárás | DAG rendezés |
Random Walk | Sztochasztikus bejárás, Markov-láncok |
Dijkstra/Prim/Kruskal | Súlyozott gráf algoritmusok |
Mindkét módszer időigénye:
ahol:
Tulajdonság | DFS | BFS |
---|---|---|
Struktúra | Verem (stack) | Sor (queue) |
Implementáció | Rekurzív vagy iteratív | Iteratív |
Cél | Mélységi vizsgálat | Szélességi vizsgálat |
Jó példák | Topologikus sorrend, ciklus | Legrövidebb út, komponens detektálás |
Memória | Mélységgel arányos | Szélességgel arányos |
Fogalom | Leírás |
---|---|
DFS | Mélységi bejárás, verem/alapú |
BFS | Szélességi bejárás, sor/alapú |
Irányított | Él irányát figyelembe vesszük |
Ciklus | DFS/BFS-sel detektálható |
Komplexitás | |
Alkalmazások | Ütemezés, hálózatok, játékok, mesterséges intelligencia |