Sobes.tech
Middle

Co je to algoritmus hledání do šířky?

sobes.tech AI

Odpověď od AI

Algoritmus hledání do šířky (BFS - Breadth-First Search) je algoritmus průchodu nebo hledání v stromu nebo grafu. Začíná od kořenového uzlu (nebo libovolného uzlu, pokud graf není strom) a prozkoumá všechny jeho přímé sousedy, poté sousedy těchto sousedů a tak dále, úroveň po úrovni. BFS je implementován pomocí fronty.

Princip fungování:

  1. Umístěte počáteční uzel do fronty.
  2. Dokud není fronta prázdná:
    • Odeberte uzel z fronty.
    • Pokud je uzel hledaný, ukončete hledání.
    • Jinak vložte všechny jeho nenavštívené sousedy do fronty a označte je jako navštívené.

Charakteristiky:

  • Kompletnost: Zaručuje nalezení řešení, pokud existuje.
  • Optimálnost: Najde nejkratší cestu v bezešvém grafu (kde váhy hran jsou stejné).
  • Časová složitost: Závisí na struktuře grafu, pro E hran a V vrcholů — O(V + E).
  • Paměťová složitost: O(V) v nejhorším případě, protože je třeba uložit navštívené vrcholy a frontu.

Použití v QA:

  • Vyhledávání nejkratší cesty mezi uzly v testovacích scénářích.
  • Zkoumání všech dosažitelných stavů systému při testování konečných automatů.
  • Testování dostupnosti všech stránek webu při crawlingu.

Příklad (průchod stromem):

from collections import deque

# Příklad reprezentace stromu jako seznam sousedství
graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F'],
    'D': [],
    'E': ['F'],
    'F': []
}

def bfs(graph, start_node):
    visited = set()
    queue = deque([start_node])
    visited.add(start_node)

    while queue:
        node = queue.popleft()
        print(node)

        for neighbor in graph[node]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)

# Příklad volání
# bfs(graph, 'A')
# Výstup:
# A
# B
# C
# D
# E
# F