Przeszukiwanie wszerz

Przeszukiwanie wszerz (1) Przeszukiwanie wszerz, przykład

Przeszukiwanie wszerz (ang. breadth-first search, w skrócie BFS) – jeden z dwóch podstawowych algorytmów przeszukiwania grafu. Polega na przeglądaniu wierzchołków grafu według ich odległości od wierzchołka źródłowego (wyrażanej w liczbie krawędzi).

Przebieg algorytmu

  1. Oznacz wszystkie wierzchołki grafu jako nieodwiedzone.
  2. Odwiedź wierzchołek źródłowy, dodaj go do kolejki Q.
  3. Dopóki kolejka Q nie jest pusta:
    1. Pobierz pierwszy wierzchołek z kolejki (usuwając go z niej).
    2. Odwiedź wszystkie jeszcze nieodwiedzone wierzchołki sąsiednie tego wierzchołka, dodaj je do kolejki Q.

Zwyczajowo przyjmuje się, że:

  • nieodwiedzone wierzchołki są oznaczone jako białe,
  • odwiedzone wierzchołki znajdujące się w kolejce Q oznaczone są jako szare,
  • odwiedzone wierzchołki spoza kolejki Q (te, których sąsiedzi są na pewno odwiedzeni) oznaczone są jako czarne.

Złożoność

Oznaczmy przez v liczbę wierzchołków grafu i przez e liczbę jego krawędzi. Początkowa część algorytmu ma złożoność O(v) – oznaczamy każdy wierzchołek. Liczba relacji sąsiedztwa jest równa liczbie krawędzi (lub jej dwukrotności, jeśli graf jest nieskierowany), więc złożoność czasowa głównej pętli algorytmu to O(e). Łącznie złożoność algorytmu jest więc rzędu O(v+e).

Jeśli każdy wierzchołek jest osiągalny ze źródła (po zakończeniu działania algorytmu nie będzie nieodwiedzonych wierzchołków), to e ≥ (v−1). Przy takim założeniu złożoność czasowa algorytmu wynosi O(e).

Zastosowanie

Za pomocą przeszukiwania grafu wszerz można wyznaczyć najkrótsze pod względem liczby krawędzi (ale nie wag!) ścieżki między wierzchołkiem źródłowym a pozostałymi wierzchołkami. Algorytm ten może być więc wykorzystany do rozwiązania szczególnego przypadku problemu najkrótszej ścieżki, gdy wszystkie krawędzie mają taką samą dodatnią wagę. Przeszukiwanie wszerz jest częścią składową niektórych bardziej zaawansowanych algorytmów grafowych, np. algorytmu Edmondsa-Karpa.

Bibliografia

  • T.H. Cormen, Ch.E. Leiserson, R.L. Rivest, C. Stein, Wprowadzenie do algorytmów, Wydawnictwo Naukowe PWN, Warszawa, 2012, ISBN 9788301169114.
Ocena: 0 Tak Nie
Liczba głosów: 0.

Dodano: 21 listopada 2017 17:35, ostatnia edycja: 30 stycznia 2019 15:55.

REKLAMA

Zobacz też

K-opt, algorytm k-optymalny – algorytm lokalnej optymalizacji wykorzystywany przy rozwiązywaniu problemu komiwojażera. Algorytm ten nie służy do samego wyznaczania trasy, a jedynie do ulepszania jej. Najprostszą wersją tego algorytmu jest algorytm 2-optymalny.

→ Czytaj całość

Algorytm memetyczny – algorytm będący połączeniem algorytmu genetycznego i metod lokalnej optymalizacji. Czasami określany również jako hybrydowy algorytm ewolucyjny.

→ Czytaj całość

Wyznaczanie najkrótszej ścieżki – zagadnienie polegające na wyszkaniu w grafie takiej ścieżki łączącej dwa wierzchołki, której suma wag krawędzi jest jak najmniejsza.

W przypadku pesymistycznym do wyznaczenia optymalnej ścieżki z wierzchołka A do wierzchołka B konieczne jest wyznaczenie najkrótszych ścieżek z wierzchołka A do wszystkich pozostałych wierzchołków w grafie. Zagadnienie takie jest określane jako poszukiwanie najkrótszych ścieżek z jednego źródła. Do rozwiązywania tego zagadnienia można wykorzystać następujące algorytmy:

Nieco innym zagadnieniem jest poszukiwanie najkrótszych ścieżek pomiędzy każdą parą wierzchołków. W tym celu można wykorzystać algorytmy wymienione powyżej (wykonując je wielokrotnie, za każdym razem przyjmując inny wierzchołek źródłowy) lub algorytmy poszukujące od razu wszystkich ścieżek, takie jak:

Aby znalezienie najkrótszej ścieżki było możliwe, graf nie może zawierać ujemnych cykli osiągalnych z wierzchołka źródłowego. Jeśli taki cykl istnieje, to poruszając się nim „w kółko” cały czas zmniejszamy długość ścieżki. Dopuszczalne jest natomiast występowanie krawędzi o ujemnej wadze, choć nie wszystkie algorytmy dopuszczają ten przypadek.

Jeśli poszukujemy ścieżek o najmniejszej liczbie krawędzi (np. wtedy, gdy wszystkie krawędzie mają taką samą, dodatnią wagę), to zamiast powyższych algorytmów możemy skorzystać z prostego przeszukiwania grafu wszerz.

→ Czytaj całość
Polityka prywatnościKontakt