Coding Interview Prep · Lekcja

Floyd-Warshall dla wszystkich par

Najkrótsze ścieżki między każdą parą wierzchołków

Lekcja 4 z 413 kroki

Floyd-Warshall dla wszystkich par to bezpłatna lekcja Coding Interview Prep na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Coding Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Wszystkie pary naraz

Czasami potrzebna jest najkrótsza ścieżka między każdą parą wierzchołków, a nie tylko ścieżki z jednego źródła. To problem najkrótszych ścieżek dla wszystkich par.

Poznaj algorytm Floyda-Warshalla

Floyd-Warshall wypełnia pełną tabelę odległości dla wszystkich par za pomocą trzech przejrzystych zagnieżdżonych pętli i niemal bez dodatkowej konfiguracji.

Macierz odległości

Należy użyć macierzy, w której dist[i][j] oznacza najlepiej znany koszt przejścia z i do j. Macierz należy zainicjalizować na podstawie podanych krawędzi bezpośrednich.

dist = [[INF] * n for _ in range(n)]

Ustawienie przekątnej

Każdy wierzchołek może dotrzeć do samego siebie bez kosztu, dlatego przed rozpoczęciem relaksacji należy ustawić przekątną dist[i][i] na zero.

for i in range(n):
    dist[i][i] = 0

Pomysł wierzchołka pośredniego

Sztuczka polega na tym, aby zezwolić ścieżkom na przechodzenie przez pośredni wierzchołek k, a następnie sprawdzić, czy trasa przez k jest tańsza niż przejście bezpośrednie.

Kolejność pętli ma znaczenie

Pętla zewnętrzna to k, czyli wybrany punkt pośredni. Pętle wewnętrzne i oraz j sprawdzają każdą parę względem tego punktu.

for k in range(n):
  for i in range(n):
    for j in range(n):

Krok relaksacji

Dla każdej pary należy wykonać relaksację przez k: jeśli przejście z i do k, a następnie z k do j jest krótsze, należy zaktualizować dist[i][j] połączonym kosztem.

if dist[i][k] + dist[k][j] < dist[i][j]:
    dist[i][j] = dist[i][k] + dist[k][j]

Dlaczego k jest na zewnątrz

Po zakończeniu przetwarzania k wszystkie pary mogą korzystać z wierzchołków pośrednich aż do k. Umieszczenie k na najbardziej zewnętrznej pętli zapewnia poprawność tej zasady.

Ujemne krawędzie są dozwolone

Algorytm Floyda-Warshalla obsługuje ujemne krawędzie, ale nie ujemne cykle. Ujemny cykl powoduje, że pewna wartość na przekątnej staje się mniejsza od zera.

Czas działania

Trzy pętle przechodzące przez n wierzchołków dają czas O(n^3) i pamięć O(n^2), więc rozwiązanie jest praktyczne tylko wtedy, gdy n nie przekracza kilkuset.

Kiedy go wybrać

Algorytm Floyda-Warshalla należy wybrać, gdy graf jest mały i gęsty oraz rzeczywiście potrzebne są odległości między każdą parą, a nie odległości z jednego źródła.

Krótki test

Która pętla musi być najbardziej zewnętrzna w algorytmie Floyda-Warshalla?

Podsumowanie: Floyd-Warshall

Należy zainicjalizować macierz, wyzerować przekątną, a następnie wykonać pętle k, i, j i relaksować ścieżki przez k. Najkrótsze ścieżki dla wszystkich par w czasie O(n^3). 🧮

Bezpłatny start

Ucz się Coding Interview Prep dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
90
Lekcje
360

Często zadawane pytania

Czy lekcja „Floyd-Warshall dla wszystkich par” jest bezpłatna?

Tak — pełny tekst „Floyd-Warshall dla wszystkich par” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Coding Interview Prep, przejdź na CoddyKit PRO. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Floyd-Warshall dla wszystkich par”?

Najkrótsze ścieżki między każdą parą wierzchołków Ćwiczysz Coding Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Coding Interview Prep?

Nie wymagamy żadnego doświadczenia. Coding Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Floyd-Warshall dla wszystkich par”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Coding Interview Prep?

Tak. Każda lekcja Coding Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Algorytm Dijkstry ze stosem kopcowym
  2. 0-1 BFS z deque
  3. Bellman-Ford i ujemne krawędzie
  4. Floyd-Warshall dla wszystkich par
← Powrót do Coding Interview Prep