PODSTAWY INFORMATYKI wykład 10. Adrian Horzyk Web: http://home.agh.edu.pl/~horzyk/ E-mail: horzyk@agh.edu.pl Google: Adrian Horzyk Gabinet: paw. D13 p. 325 Akademia Górniczo-Hutniacza w Krakowie WEAIiE, Katedra Automatyki http://www.agh.edu.pl Mickiewicza Av. 30, 30-059059 Cracow, Poland
Sortowanie kubełkowe (Bucket Sort) Sortowanie kubełkowe stosujemy przy założeniu, że dane wejściowe będą liczbami rzeczywistymi wybieranymi z przedziału [0, 1) zgodnie z rozkładem jednostajnym (tj. taki, że dla każdego zdarzenia elementarnego s należącego do przestrzeni skończonej prawdopodobieństwo wynosi 1/ S ). Idea sortowania kubełkowego opiera się na triku polegającym na podziale przedziału [0,1) na n podprzedziałów jednakowych rozmiarów, tzw. kubełków, a następnie rozrzuceniu n liczb do kubełków, do których należą. Ponieważ liczby są jednostajnie rozłożone w przedziale [0,1), więc oczekujemy, że w każdym kubełku nie będzie ich zbyt wiele. Aby otrzymać ciąg wynikowy, sortujemy najpierw liczby w każdym z kubełków, a następnie wypisujemy je, przeglądając kolejno kubełki. Kubełki implementujemy w postaci list, do których wstawiamy elementy przy pomocy algorytmu sortowania przez proste wstawianie. W ten sposób uzyskujemy kubełki składające się z posortowanych elementów. Wykład 10. Strona 2.
Sortowanie kubełkowe procedure Bucket-Sort; var i : integer; begin for i := 1 to n do Wstaw a[i] do posortowanej listy b[ n * a[i] ]; Połącz listy b[0], b[1],..., b[n-1]; end {Bucket -Sort}; Pesymistyczny czas wstawiania kolejnych elementów do n list algorytmem prostego wstawiania wynosi, gdyż ze względu na przyjętą jednostajność rozkładu. Wykład 10. Strona 3.
Mediana i jej odnajdywanie Mediana (median) to taki element zbioru, od którego w tym zbiorze jest tyle samo elementów większych lub równych co mniejszych lub równych. Jeśli zbiór Z jest posortowany rosnąco, to: Przy nieparzystej liczbie elementów n > 1 mediana jest elementem środkowym Z[ n / 2 ] (indeksy elementów rozpoczynają się od 0), np. dla zbioru Z = {1,3,5,8,9} medianą jest element 5 - poprzedzają go dwa elementy 1 i 3 oraz wyprzedzają dwa elementy 8 i 9. Przy parzystej liczbie elementów n > 1 mediana jest średnią arytmetyczną dwóch środkowych elementów Z[ n / 2-1] i Z[ n / 2 ], np. dla zbioru Z = {1,3,5,8,9,9} mediana jest równa (5 + 8) / 2 = 6,5. Od tej wartości jest dokładnie tyle samo elementów mniejszych (1,3,5) co większych (8,9,9). Istnieją również pojęcia dolnej mediany (lowermedian) i górnej mediany (upper median), które w tym przypadku oznaczają odpowiednio element Z[ n / 2-1] i Z[ n / 2 ] w ciągu uporządkowanym o parzystej liczbie elementów. Mediana posiada wiele ważnych zastosowań praktycznych w statystyce, grafice, obróbce dźwięku i wielu innych dziedzinach. Wykład 10. Strona 4.
Wyznaczanie liczb pierwszych Liczby pierwsze pełnią niezwykle ważne zadanie w matematyce oraz wszelkiego rodzaju algorytmach szyfrowania danych ze względu na to, iż nie są podzielne przez inne liczby tylko przez siebie same i przez 1. Liczby pierwsze możemy najprościej wyznaczyć przez sprawdzenie ich podzielności przez inne liczby mniejsze od nich. Czy można efektywniej? Eliminujemy podzielne przez 2, 3, Sprawdzanie podzielności przez liczby mniejsze od sqrt(p), bo jeśli istnieje jeden dzielnik większy lub równy sqrt(p) to drugi musi być mniejszy lub równy sqrt(p), Umieszczanie odnalezionych liczb pierwszych w tablicy i sprawdzanie podzielności tylko przez nie. Wykład 10. Strona 5.
Liczby pierwsze Sito Eratostenesa Sito Eratostenesa jeśli ze zbioru usuniemy wszystkie wielokrotności liczby pierwszej 2, potem 3, potem kolejnej jaka pozostała, czyli 5, bo 4 już zostało zredukowane, to w wyniku otrzymamy listę/tablicę liczb pierwszych. azwa sito pochodzi od czynności odsiewania kolejnych wielokrotności liczb pierwszych ze zbioru liczb. Wykład 10. Strona 6.
Liczby pierwsze Sito Etkina-Bernsteina Sito Atkina-Bernsteina rozpoczyna pracę ze zbiorem S, w którym wszystkie liczby są zaznaczone jako złożone (czyli nie pierwsze). Algorytm zupełnie ignoruje liczby podzielne przez 2, 3 lub 5 i opiera swoje działanie na następujących faktach matematycznych: Wszystkie liczby dające resztę z dzielenia przez 60 równą 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56 lub 58 są podzielne przez 2, zatem nie są pierwsze - algorytm je ignoruje. Wszystkie liczby dające resztę z dzielenia przez 60 równą 3, 9, 15, 21, 27, 33, 39, 45, 51 lub 57 są z kolei podzielne przez 3 i również nie są pierwsze - algorytm je ignoruje. Wszystkie liczby dające resztę z dzielenia przez 60 równą 5, 25, 35 lub 55 są podzielne przez 5 i nie są pierwsze - algorytm je ignoruje. Wszystkie liczby dające resztę z dzielenia przez 60 równą 1, 13, 17, 29, 37, 41, 49 lub 53 posiadają resztę z dzielenia przez 12 równą 1 lub 5. Liczby te są pierwsze wtedy i tylko wtedy, gdy liczba rozwiązań równania 4x 2 + y 2 = n jest nieparzysta dla x,y N, a liczba n nie jest kwadratem innej liczby naturalnej. Wszystkie liczby dające resztę z dzielenia przez 60 równą 7, 19, 31 lub 43 posiadają resztę z dzielenia przez 12 równą 7. Są one liczbami pierwszymi wtedy i tylko wtedy, gdy liczba rozwiązań równania 3x 2 + y 2 = n jest nieparzysta dla x,y N, a liczba n nie jest kwadratem innej liczby naturalnej. Wszystkie liczby dające resztę z dzielenia przez 60 równą 11, 23, 47 lub 59 posiadają resztę z dzielenia przez 12 równą 11. Są one liczbami pierwszymi wtedy i tylko wtedy, gdy liczba rozwiązań równania 3x 2 y 2 = n jest nieparzysta dla x,y N, a liczba n nie jest kwadratem innej liczby naturalnej. Wykład 10. Strona 7.
Graf Graf to taka struktura danych, w której poszczególne węzły zwane też wierzchołkami połączone mogą być każdy z każdym krawędziami skierowanymi lub nieskierowanymi. Wierzchołki i krawędzie mogą być odpowiednio etykietowane i nieść pewną dodatkową informację. W porównaniu do drzew w grafach mogą występować pętle i cykle. Grafy możemy zaimplementować w postaci tablicy określającej rodzaj połączenia oraz jego etykietę lub dynamicznie korzystając ze wskaźników. 4. 10. 1. 7. 5. 2. 3. 8. 6. 9. 1 2 3 4 5 6 7 8 9 10 1 1 1 2 1 1 3 1 1 4 1 1 1 5 1 1 1 1 6 1 1 1 7 1 1 8 1 1 9 1 10 1 Wykład 10. Strona 8.
Dynamiczna implementacja grafu Grafy podobnie jak listy i drzewa mogą być zaimplementowane z wykorzystaniem rekordów(ew. obiektów) z wykorzystaniem wskaźników. 4. 10. 1. 7. 5. 2. 3. 8. 6. 9. 1. 2. 4. W3 5. W3 W4 7. 8. 10. 3. 6. W3 9. Wykład 10. Strona 9.
Literatura i bibliografia: L. Banachowski, K. Diks, W. Rytter: Algorytmy i struktury danych, WNT, Warszawa, 2001 Z. Fortuna, B. Macukow, J. Wąsowski, Metody numeryczne, WNT, Warszawa, 1993. K. Jakubczyk, Turbo Pascal i Borland C++, Wydanie II, Helion, 2006. J. i M. Jankowscy, Przegląd metod i algorytmów numerycznych, WNT, Warszawa, 1988. A. Kiełbasiński, H. Schwetlick, Numeryczna algebra liniowa, WNT, Warszawa 1992. A. Kierzkowski, Turbo Pascal. Ćwiczenia praktyczne., Helion 2006. K. Koleśnik, Wstęp do programowania z przykładami w Turbo Pascalu, Helion, M. Sysło: Elementy Informatyki. A. Szepietowski: Podstawy Informatyki. R. Tadeusiewicz, P. Moszner, A. Szydełko: Teoretyczne podstawy informatyki. W. M. Turski: Propedeutyka informatyki. N. Wirth: Wstęp do programowania systematycznego. N. Wirth: ALGORYTMY + STRUKTURY DANYCH = PROGRAMY. Wikipedia Algorytmy sortujące: http://edu.i-lo.tarnow.pl/inf/index.php Algorytmy sortujące: http://www.home.umk.pl/~abak/wdimat/s/index.html Wykład 10. Strona 10.