Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Algorytmy
Algorytmyeasy

BFS vs DFS — jaka jest różnica i kiedy użyć którego?

Tagi
#bfs#dfs#graph#traversal
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

BFS idzie warstwami i znajduje najkrótszą ścieżkę w grafie nieważonym. DFS schodzi w głąb i jest wygodny do przeglądania, wykrywania cykli i problemów typu topologicznego.

function bfs(start: number, graph: number[][]) {
  const q: number[] = [start];
  const seen = new Set<number>([start]);

  while (q.length) {
    const v = q.shift()!;
    for (const n of graph[v]) {
      if (!seen.has(n)) {
        seen.add(n);
        q.push(n);
      }
    }
  }
}

Odpowiedź zaawansowana

Głębiej

Oba algorytmy odwiedzają wierzchołki/krawędzie stałą liczbę razy, więc bazowy czas to O(V+E). Różni się kolejność i struktura danych.

  • BFS używa kolejki i idzie warstwami (rosnąca odległość). Dlatego daje shortest path w grafie nieważonym.
  • DFS używa stosu (często rekurencji) i schodzi maksymalnie w głąb; jest dobry, gdy liczy się kolejność wejścia/wyjścia.

Kiedy którego użyć

  • BFS: najkrótsza ścieżka po liczbie krawędzi, poziomy, dwudzielność, minimalna liczba ruchów.
  • DFS: wykrywanie cykli (graf skierowany), rozumowanie topologiczne, spójne składowe, backtracking.

Uwagi praktyczne

  • W JS `shift()` spowalnia BFS; lepiej użyć kolejki z indeksem.
  • Rekurencyjny DFS może przepełnić call stack; wtedy użyj własnego stosu.

Powiązane pytania

Algorytmy
Co to jest sortowanie topologiczne i kiedy jest możliwe?
#topological-sort#dag#graph
Algorytmy
Kiedy BFS może zastąpić algorytm Dijkstry?
#shortest-path#bfs#dijkstra
Algorytmy
Co to jest algorytm Dijkstry?
#graph#shortest-path
#dijkstra
Algorytmy
BFS vs DFS?
#graph#bfs#dfs
Struktury danych
Lista sąsiedztwa vs macierz sąsiedztwa: kiedy wybrać które?
#graph#adjacency-list#adjacency-matrix