Informatyka w szkole - algorytm Dijkstry dla każdego Krzysztof Diks Instytut Informatyki, Uniwersytet Warszawski
Problem 1: Labirynt Źródło: www.dla-dzieci.ugu.pl
Problem : Wilk, owca i kapusta Źródło: https://play.google.com/store/apps/details?id=air.com.webgames.wolfsheepandcabbage 3
Problem 3: Przelewanie miodu Dwa niedźwiadki znalazły składzik z miodem. Był w nim 8-litrowy słój pełen miodu i dwa słoje puste, 5-litrowy i 3-litrowy. W jaki sposób korzystając tylko z tych słoi podzielić równo miód? Źródło rysunku: http://slon8.w.interia.pl/
Problem : najkrótsza trasa z Rotterdamu do Groningen Źródło: mapy Google 5
Co łączy labirynt, zagadki z przeprawą przez rzekę i przelewaniem miodu oraz podróż w Holandii? GRAF: węzeł/wierzchołek krawędź droga/ścieżka 6
Labirynt A A E E F B F C C D B D 7
Wilk, owca i kapusta W,O,K W,O K W,K O K,O W OIW,K W,K O W K,O K W,O OIW,K W,O,K 8
Wilk, owca i kapusta W,O,K W,O K W,K O K,O W OIW,K W,K O W K,O K W,O OIW,K W,O,K 9
Miodek Pytanie: czy istnieje ścieżka z (0,0,8) do (0,,)? 3L,5L,8L?... 0,5,3 3,0,5 0,0,8 10
Wycieczka 6 km 5 km 11
Problem obliczania najkrótszej drogi pomiędzy dwoma miastami Q P 3 1 0 8 S L 1 8 C 18 G 0 15 1 F 11 K 17 A O N 1 3 J B 7 13 10 1 8 E D 10 30 0 I H 11 M Zadanie: znajdź najkrótszą drogę z punktu P do punktu Q. Wyznaczyć najkrótsze drogi z punktu P do wszystkich pozostałych punktów. 1
Problem obliczania najkrótszej drogi pomiędzy dwoma miastami Q: P:0 B:5 8 C: 1 0 7 18 D:7 S:0 F:7 E:1 10 13 G:1 15 3 0 10 11 J: 16 30 1 K:0 I:13 H:9 8 L:0 0 1 3 1 11 1 17 A:1 O:19 N:1 8 M:11 13
Edsger Wybe Dijkstra 1930-00 1
Fragment wywiadu: For a demonstration for noncomputing people you have to have a problem statement that non-mathematicians can understand; they even have to understand the answer. So I designed a program that would find the shortest route between two cities in the Netherlands, using a somewhat reduced roadmap of the Netherlands, on which I had selected 6 cities (so that in the coding six bits would suffice to identify a city). What s the shortest way to travel from Rotterdam to Groningen? It is the algorithm for the shortest path, which I designed in about 0 minutes. 15
Google scholar: 16
Algorytm Dijkstry według Dijkstry Q P: 0 B:5 8 C: 1 0 7 18 D:7 S:0 F:7 E:1 10 13 3 G: 15 0 J 10 11 30 1 I:7 H:9 8 L K: 8 0 1 3 1 11 1 17 A O N 8 M I. najkrótsze ścieżki dla A A = {P, B. C, D} B = {S, G, K, E, I, H} C = {Q, A, L, O, J, N, M} II. najkrótsze ściezki dla B III. pozostałe krawędzie 17
Algorytm Dijkstry według Dijkstry (wolne tłumaczenie KD) Na początek wszystkie wierzchołki umieszczamy w zbiorze C, a wszystkie krawędzie w zbiorze III. Następnie przenosimy wierzchołek P do zbioru A i powtarzamy, co następuje Krok 1. Rozważ każdą krawędź r łączącą wierzchołek właśnie przeniesiony do zbioru A, z pewnym wierzchołkiem R ze zbioru B lub C. Jeżeli wierzchołek R należy do zbioru B, zbadaj, czy użycie krawędzi r daje krótszą ścieżkę z P do R od tej wyznaczonej już wcześniej i wykorzystującej stosowną krawędź ze zbioru II. Jeżeli tak nie jest, krawędź r zostaje odrzucona; jeżeli jednakże krawędź r daje krótszą ścieżkę z P do R od tej dotychczas obliczonej, to zastąp stosowną krawędź ze zbioru II krawędzią r, a tą pierwszą uznaj za odrzuconą. Jeżeli wierzchołek R należy do zbioru C, to przenieś go do zbioru B, a krawędź r do zbioru II. Krok. Jeżeli się ograniczymy tylko do krawędzi ze zbioru I i jednej krawędzi ze zbioru II, to każdy wierzchołek ze zbioru B może być połączony z wierzchołkiem P tylko na jeden sposób. W tym ujęciu każdy wierzchołek w zbiorze B ma jednoznacznie wyznaczoną odległość do P: węzeł z najmniejszą odległością od P zostaje przeniesiony ze zbioru B do zbioru A, a stosowna krawędź ze zbioru II do zbioru I. Następnie wracamy do kroku 1 i powtarzamy cały proces do momentu, aż wierzchołek Q znajdzie się w zbiorze A. Wówczas rozwiązanie zostaje znalezione. 18
Algorytm Dijkstry implementacja W jaki sposób implementować graf? - macierz sąsiedztwa - listy sąsiedztwa Reprezentacja zbiorów A, B, C oraz I, II i III. - reprezentacja zbioru B element zbioru: (wierzchołek, odległość, stosowna krawędź ze zbioru II) operacje: inicjacja zbioru pustego, Insert, Min, DeleteMin, DecreaseKey 19
Algorytm Dijkstry implementacja W jaki sposób implementować graf? - macierz sąsiedztwa - listy sąsiedztwa Reprezentacja zbiorów A, B, C oraz I, II i III. - reprezentacja zbioru B element zbioru: (wierzchołek, odległość, stosowna krawędź ze zbioru II) operacje: inicjacja zbioru pustego, Insert, Min, DeleteMin, DecreaseKey kolejka priorytetowa Koszt zamortyzowany 0
Dziękuję! 1