Podstawy Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 7 i 8 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 1 / 44
Struktura danych - tablica Tablica jednowymiarowa (wektor) jest takim uporzadkowanym zbiorem elementów jednorodnych, że z każdym elementem jest zwiazany uporzadkowany zbiór liczb całkowitych - indeksów. Indeksy w sposób jednoznaczny określaja pozycję każdego elementu tablicy. W tablicach każdy indeks zmienia się ze stałym krokiem od dolnej do górnej granicy. W przypadku tablic z języka C/C++/Java zbiór indeksów przebiega wartości od 0 do n 1, dla pewnej ustalonej liczby naturalnej n. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 2 / 44
Struktura danych - tablica Tablica jednowymiarowa (wektor) jest takim uporzadkowanym zbiorem elementów jednorodnych, że z każdym elementem jest zwiazany uporzadkowany zbiór liczb całkowitych - indeksów. Indeksy w sposób jednoznaczny określaja pozycję każdego elementu tablicy. W tablicach każdy indeks zmienia się ze stałym krokiem od dolnej do górnej granicy. W przypadku tablic z języka C/C++/Java zbiór indeksów przebiega wartości od 0 do n 1, dla pewnej ustalonej liczby naturalnej n. Przykład: 11 elementowa tablica liczb całkowitych. Indeksy 0 1 2 3 4 5 6 7 8 9 10 Wartości -1 3 5 7 4 55 76-1 4 89 5 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 2 / 44
Struktura danych - tablica Przykład: 11 elementowa tablica liczb rzczywistych o nazwie A. Indeksy 0 1 2 3 4 5 6 7 8 9 10 Wartości -1.2 3 5.5 7.34 4 55 76.1-1.1 4 89 5.33 Notacja: 1 element tablicy: A[0] 5 element tablicy: A[4] i element tablicy: A[i-1] Zakres tablicy: A[0].. A[n-1], gdzie n oznacza liczbe elementów w tablicy. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 3 / 44
Struktura danych - tablica Przykład: 11 elementowa tablica liczb rzczywistych o nazwie A. Indeksy 0 1 2 3 4 5 6 7 8 9 10 Wartości -1.2 3 5.5 7.34 4 55 76.1-1.1 4 89 5.33 Notacja: 1 element tablicy: A[0] 5 element tablicy: A[4] i element tablicy: A[i-1] Zakres tablicy: A[0].. A[n-1], gdzie n oznacza liczbe elementów w tablicy. wartość 2 elementu tablicy A: A[1] = 3 wartość 11 elementu tablicy A: A[10] = 5.33 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 3 / 44
Struktura danych - tablica Przykład: 11 elementowa tablica zanków o nazwie C. Indeksy 0 1 2 3 4 5 6 7 8 9 10 Wartości A L A M A K O T A Notacja: 1 element tablicy: C[0] 5 element tablicy: C[4] i element tablicy: C[i-1] Zakres tablicy: C[0].. C[n-1], gdzie n oznacza liczbe elementów w tablicy. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 4 / 44
Struktura danych - tablica Przykład: 11 elementowa tablica zanków o nazwie C. Indeksy 0 1 2 3 4 5 6 7 8 9 10 Wartości A L A M A K O T A Notacja: 1 element tablicy: C[0] 5 element tablicy: C[4] i element tablicy: C[i-1] Zakres tablicy: C[0].. C[n-1], gdzie n oznacza liczbe elementów w tablicy. wartość 2 elementu tablicy C: C[1] = L wartość 9 elementu tablicy C: C[8] = O Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 4 / 44
Sumowanie elemantów z tablicy, instrukacja while Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} Algorytm: Suma 1: suma := 0; 2: i := 0; 3: while i < n do 4: suma := suma+a[i]; 5: i := i + 1; 6: end while 7: return suma; Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 5 / 44
Sumowanie elemantów z tablicy, instrukacja for Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} Algorytm: Suma 1: suma := 0; 2: for i := 0 n 1 do 3: suma := suma+a[i]; 4: end for 5: return suma; Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 6 / 44
Sumowanie elemantów parzystych z tablicy, instrukacja while Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} Algorytm: Suma 1: suma := 0; 2: i := 0; 3: while i < n do 4: if A[i] mod 2 = 0 then 5: suma := suma+a[i]; 6: end if 7: i := i + 1; 8: end while 9: return suma; Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 7 / 44
Sumowanie elemantów parzystych z tablicy, instrukacja for Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} Algorytm: Suma 1: suma := 0; 2: for i := 0 n 1 do 3: if A[i] mod 2 = 0 then 4: suma := suma+a[i]; 5: end if 6: end for 7: return suma; Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 8 / 44
Element minimalny i maksymalny zbioru Definicja problemu: Dane: n - liczba elementów zbioru a 1, a 2, a 3,...,a n - ciag elementów Szukane: Elementy największy i najmniejszy zbioru. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 9 / 44
Element minimalny zbioru Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} Algorytm: MIN 1: min := 0; 2: for all i := 1 to n 1 do 3: if A[i] < A[min] then 4: min := i; 5: end if 6: i := i + 1; 7: end for 8: return min; Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 10 / 44
Element maksymalny zbioru Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} Algorytm: MAX 1: max := 0; 2: for all i := 1 to n 1 do 3: if A[i] > A[max] then 4: max := i; 5: end if 6: i := i + 1; 7: end for 8: return max; Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 11 / 44
Wyszukiwanie binarne Wyszukiwanie binarne pozwala na szybkie wyszukiwanie wartości w posortowanych zbiorach (np. tablicy). Skuteczność wyszukiwania binarnego wynika z tego, że zamiast przegladać wszystkie elementy posortowanego zbioru po kolei, wykorzystujemy informację o tym, że jest on uporzadkowany. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 12 / 44
Wyszukiwanie binarne Algorytm: Dana jest tablica A oraz poszukiwany element key. Sprawdź środkowy element tablicy. Jeśli jest równy key, to koniec. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 13 / 44
Wyszukiwanie binarne Algorytm: Dana jest tablica A oraz poszukiwany element key. Sprawdź środkowy element tablicy. Jeśli jest równy key, to koniec. Jeśli środkowy element jest większy niż key, to poszukiwany element jeśli jest w tablicy, to jest w jej lewej części. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 13 / 44
Wyszukiwanie binarne Algorytm: Dana jest tablica A oraz poszukiwany element key. Sprawdź środkowy element tablicy. Jeśli jest równy key, to koniec. Jeśli środkowy element jest większy niż key, to poszukiwany element jeśli jest w tablicy, to jest w jej lewej części. Jeśli środkowy element jest mniejszy niż key, to poszukiwany element jeśli jest w tablicy, to jest w jej prawej części. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 13 / 44
Wyszukiwanie binarne - przykład Znaleźć liczbę 9 w ciagu: 3, 5, 7, 8, 9, 12, 15. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 14 / 44
Wyszukiwanie binarne - algorytm Require: tablica a o rozmiarze n, wartość key {a=[0],...,a[n-1]} Algorytm: Wyszukiwanie binarne 1: left := 0; 2: right := n 1; 3: while left <= right do 4: curr := (left + right)/2; 5: if key = a[curr] then 6: return curr; 7: else 8: if key < a[curr] then 9: right := curr 1; 10: else 11: left := curr + 1; 12: end if 13: end if 14: end while Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 15 / 44
Liczby pierwsze Liczby pierwsze już od wieków fascynowały i zastanawiały uczonych. W matematyce pojęcie pierwszości liczb, to fundamentalne zagadnienie dotyczace liczb naturalnych. Jest ich nieskończenie wiele, co udowodnił już Euklides. Liczba pierwsza jest liczba naturalna, która dzieli się bez reszty tylko przez 1 i przez sama siebie, np. 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 itd. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 16 / 44
Sita Eratostenesa Sito Eratostenesa to algorytm wyznaczania liczb pierwszych z zadanego przedziału [2, n]. Idea: Ze zbioru liczb naturalnych większych od jedności, tj. {2, 3, 4,...}, wybieramy najmniejsza, czyli 2, i wykreślamy wszystkie jej wielokrotności większe od niej samej, tj. wszystkie liczby parzyste większe od 2. Z pozostałych liczb wybieramy najmniejsza niewykreślona liczbę, tj. 3, i usuwamy wszystkie jej wielokrotności większe od niej samej: {6, 9, 12,...}; nie przejmujemy się tym, że niektóre liczby (np. 6) będa skreślane więcej niż raz. Według tej samej procedury postępujemy dla liczby 5. Potem dla liczby 7, 11, 13, itd., aż do sprawdzenia wszystkich niewykreślonych wcześniej liczb. Dla danej liczby n wszystkie niewykreślone liczby mniejsze od n sa liczbami pierwszymi. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 17 / 44
Zadanie! Zapisać algorytm Sita Eratostenesa w postaci pseudokodu i schematu blokowego w programie Eli! Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 18 / 44
Algorym wyznaczania liczb pierwszych Twierdzenie 1 Liczba złożona n posiada dzielnik, który jest mniejszy od pierwiastka z tej liczby, tj. sqrt(n). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 19 / 44
Algorym wyznaczania liczb pierwszych Twierdzenie 1 Liczba złożona n posiada dzielnik, który jest mniejszy od pierwiastka z tej liczby, tj. sqrt(n). Dowód - idea: Niech n będzie liczba złożona. Wtedy n = a b oraz 0 < a b < n. Zatem musi być a sqrt(n), gdyż inaczej otrzymalibyśmy a b > n (sprzeczność). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 19 / 44
Algorym wyznaczania liczb pierwszych Require: Liczba n Algorytm: Czy n jest liczba pierwsza 1: i := 2 2: while i < sqrt(n)+1 do 3: if i jest dzielnikiem n then 4: return n jest liczba złożona; 5: end if 6: i := i + 1; 7: end while 8: return n jest liczba pierwsza; Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 20 / 44
Kluczowe zastosowanie liczb pierwszych - Kryptografia Kryptografia to dziedzina zajmujaca się praktycznym zastosowaniem wiedzy matematycznej w celu ochrony danych przechowywanych w komputerach, podczas przesyłu informacji przez sieć komputerowa badź jakaś inna, w której występuja dane w postaci cyfrowej. Ma ona ogromne znaczenie w ochronie danych komputerowych. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 21 / 44
Kluczowe zastosowanie liczb pierwszych - Kryptografia Kryptografia to dziedzina zajmujaca się praktycznym zastosowaniem wiedzy matematycznej w celu ochrony danych przechowywanych w komputerach, podczas przesyłu informacji przez sieć komputerowa badź jakaś inna, w której występuja dane w postaci cyfrowej. Ma ona ogromne znaczenie w ochronie danych komputerowych. Nie jest to oczywiście pełny opis, ponieważ kryptografia zajmowała się ochrona danych ogólnie, nie tylko komputerowych, jednak w dzisiejszych czasach ma to już raczej tylko znaczenie historyczne. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 21 / 44
Kryptografia - wykorzystanie Powszechnie kryptografię wykorzystuje się w bankowości internetowej, gdzie wszystkie transakcje odbywaja się w tak zwanym bezpiecznym połaczeniu, a dodatkowo każda operacja jest zatwierdzana przy użyciu klucza prywatnego. Jednak poszczególne metody zależa już od konkretnego w tym przypadku banku, ale również każdej innej instytucji potrzebujacej szyfrowania badź uwierzytelniania. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 22 / 44
Kryptografia - krótka historia Źródło:http://www.prasal.com/kryptografia/wst.html Ludzie od zawsze potrzebowali ukrywać jakieś informacje. Kryptografia była znana już za czasów Cesarstwa Rzymskiego, i służyła do szyfrowania wiadomości. Stosowany algorytm polegał na zastapieniu każdej litery w tekście jawnym litera znajdujac a się o pewna liczbę pozycji dalej w alfabecie. Oczywiście dziś algorytm taki jest banalny, jednakże w swoich czasach spełniał dobrze swa funkcję. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 23 / 44
Kryptografia - krótka historia W XVII wieku kryptografia pojawiła się w zastosowaniach wojskowych i była używana aż do XX wieku. Były to jednak proste szyfry podstawieniowo - przestawieniowe. Problem był w tym, że ujawnienie metody szyfrowania czyniło ja niezdatna do użytku. Tak jak to było w przypadku Enigmy, wystarczyło zbudować kopię, by złamać niemieckie szyfry. Zatem brak informacji o historycznych systemach kryptograficznych wyjaśnia fakt konieczności całkowitego utajniania używanych metod szyfrowania. Powszechne były też metody steganofraficzne, takie jak zaznaczanie liter, pisanie niewidzialnym atramentem, czy nakłuwanie szpilka liter. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 24 / 44
Kryptografia - krótka historia Następnie powstawały kolejne coraz bardziej skomplikowane szyfry. Rozwój kryptografii symetrycznej postępował dosyć szybko. Powstały szyfry jedno- i wielo-alfabetowe, szyfrowanie wieloliterowe, techniki transpozycyjne, ale nie były to jedyne metody utajniania informacji. Bardzo powszechne były maszyny rotorowe, jak wspomniana już wcześniej Enigma, ale również Purple używana przez Japonię. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 25 / 44
Kryptografia - krótka historia Następnie powstawały kolejne coraz bardziej skomplikowane szyfry. Rozwój kryptografii symetrycznej postępował dosyć szybko. Powstały szyfry jedno- i wielo-alfabetowe, szyfrowanie wieloliterowe, techniki transpozycyjne, ale nie były to jedyne metody utajniania informacji. Bardzo powszechne były maszyny rotorowe, jak wspomniana już wcześniej Enigma, ale również Purple używana przez Japonię. W latach 60 w firmie IBM zaprojektowano algorytm szyfrujacy Lucifer. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 25 / 44
Kryptografia - krótka historia Następnie powstawały kolejne coraz bardziej skomplikowane szyfry. Rozwój kryptografii symetrycznej postępował dosyć szybko. Powstały szyfry jedno- i wielo-alfabetowe, szyfrowanie wieloliterowe, techniki transpozycyjne, ale nie były to jedyne metody utajniania informacji. Bardzo powszechne były maszyny rotorowe, jak wspomniana już wcześniej Enigma, ale również Purple używana przez Japonię. W latach 60 w firmie IBM zaprojektowano algorytm szyfrujacy Lucifer. Lucifer na polecenie Narodowego Biura Standardów (1973r.) został udoskonalony i w 1976 r. zatwierdzony jako standard szyfrowania danych, czyli tzw. DES (Data Encryption Standard). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 25 / 44
Kryptografia - krótka historia Standard DES obecnie nie jest już uznawany za bezpieczny. Spowodowane jest to zbyt krótkim kluczem symetrycznym (56 Bitów). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 26 / 44
Kryptografia - krótka historia Standard DES obecnie nie jest już uznawany za bezpieczny. Spowodowane jest to zbyt krótkim kluczem symetrycznym (56 Bitów). W 1999 r. klucz oparty na DES złamano w ciagu 22 godz. i 15min, co przy obecnej szybkości komputerów czyni ten sposób szyfrowania bezuzytecznym. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 26 / 44
Kryptografia - krótka historia Standard DES obecnie nie jest już uznawany za bezpieczny. Spowodowane jest to zbyt krótkim kluczem symetrycznym (56 Bitów). W 1999 r. klucz oparty na DES złamano w ciagu 22 godz. i 15min, co przy obecnej szybkości komputerów czyni ten sposób szyfrowania bezuzytecznym. Oblicze kryptografii zmieniło się, kiedy w 1976 roku Diffie i Hellman przedstawili nowy algorytm szyfrowania danych oparty na kluczach publicznych. Dawało to możliwość zaszyfrowania informacji przez dowolna osobę za pomoca klucza jawnego, natomiast odszyfrować mogła ja tylko osoba majaca swój klucz prywatny, zwjazany z kluczem jawnym. Wyliminowano potrzebę komunikacji się użytkowników celem wymiany klucza. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 26 / 44
Kryptografia - krótka historia Powstały takie algorytmy jak MD4, zaproponowany przez Rona Rivesta w 1990 roku, a poprawiony dwa lata później przez tego samego autora do wersji MD5. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 27 / 44
Kryptografia - krótka historia Powstały takie algorytmy jak MD4, zaproponowany przez Rona Rivesta w 1990 roku, a poprawiony dwa lata później przez tego samego autora do wersji MD5. Kolejnym algorytmem był SHA utworzony w 1993r. przez Narodowy Instytut Standardów i Technologii USA (NIST). Jest oparty na MD5, a jego budowa jest podobna do MD4. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 27 / 44
Kryptografia - krótka historia Powstały takie algorytmy jak MD4, zaproponowany przez Rona Rivesta w 1990 roku, a poprawiony dwa lata później przez tego samego autora do wersji MD5. Kolejnym algorytmem był SHA utworzony w 1993r. przez Narodowy Instytut Standardów i Technologii USA (NIST). Jest oparty na MD5, a jego budowa jest podobna do MD4. 2 stycznia 1997r. NIST ogłosił poszukiwania nowego standardu szyfrowania danych AES (Advanced Encryption Standard), określajac minimalne wymogi następujaco: dokumentacja szyfru musi być powszechnie dostępna szyfr ma należeć do grupy blokowych szyfrów symetrycznych projekt szyfru musi zakładać możliwość rozszerzenia długości klucza w razie takiej potrzeby szyfr musi być łatwy do implementacji zarówno sprzętowej jak i programowej nowy szyfr ma być bardziej efektywny oraz bardziej bezpieczny niż 3-DES, czyli: długość klucza to 128, 192 lub 256 bitów, a wielkość bloku: 128, 192 lub 256 bitów Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 27 / 44
Kryptografia - krótka historia Spośród wszystkich projektów, najlepsza ocenę uzyskał Rijndael i został wybrany nowym standardem szyfrowania danych (AES). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 28 / 44
Kryptografia - krótka historia Spośród wszystkich projektów, najlepsza ocenę uzyskał Rijndael i został wybrany nowym standardem szyfrowania danych (AES). Rijndael jest blokowym szyfrem konwencjonalnym, pracujacym na blokach o długości 128, 192 oraz 256 bitów. Dozwolone sa również długości 160 oraz 224 bity, ale nie sa one uznawane jako standard. Identycznej długości moga być klucze. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 28 / 44
Kryptografia - krótka historia Spośród wszystkich projektów, najlepsza ocenę uzyskał Rijndael i został wybrany nowym standardem szyfrowania danych (AES). Rijndael jest blokowym szyfrem konwencjonalnym, pracujacym na blokach o długości 128, 192 oraz 256 bitów. Dozwolone sa również długości 160 oraz 224 bity, ale nie sa one uznawane jako standard. Identycznej długości moga być klucze. Kryptografia będzie się rozwijać, ze względu na ciagłe udoskonalanie systemów komputerowych, a co za tym idzie zwiększa się ich moc obliczeniowa, a to oznacza knieczność poszukiwania nowych badź udoskonalania już istniejacych sposobów ochrony danych. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 28 / 44
Liczby doskonałe Liczba doskonała jest liczba naturalna, równa sumie wszystkich swoich dzielników, mniejszych od niej samej. Najmniejsza liczba doskonała jest 6, ponieważ 6 = 3 + 2 + 1. Następna jest 28 (28 = 14 + 7 + 4 + 2 + 1). Kolejne znane to 496, 8128, 33550336... Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 29 / 44
Liczby doskonałe W IX księdze Elementów Euklides podał następujacy sposób znajdowania liczb doskonałych parzystych: obliczać sumy kolejnych potęg dwójki np. 1 + 2 + 4 + 8 +..., jeżeli, któraś z otrzymanych sum okaże się liczba pierwsza, należy pomnożyć ja przez ostatni składnik i otrzymamy liczbę doskonała. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 30 / 44
Problem Sortowania Definicja problemu Niech (U, ) będzie zbiorem liniowo uporzadkowanym z relacja porzadkuj ac a i niech (a 1, a 2,..., a n ) będzie ciagiem n elementów z U, dla pewnego całkowitego n > 0. Znaleźć permutację (a 1, a 2,..., a n) taka, że (a 1 a 2 a n). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 31 / 44
Problem Sortowania Definicja problemu Niech (U, ) będzie zbiorem liniowo uporzadkowanym z relacja porzadkuj ac a i niech (a 1, a 2,..., a n ) będzie ciagiem n elementów z U, dla pewnego całkowitego n > 0. Znaleźć permutację (a 1, a 2,..., a n) taka, że (a 1 a 2 a n). Przykład Wejście: 8 2 4 9 3 6 Wyjście: 2 3 4 6 8 9 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 31 / 44
Problem Sortowania Definicja problemu Niech (U, ) będzie zbiorem liniowo uporzadkowanym z relacja porzadkuj ac a i niech (a 1, a 2,..., a n ) będzie ciagiem n elementów z U, dla pewnego całkowitego n > 0. Znaleźć permutację (a 1, a 2,..., a n) taka, że (a 1 a 2 a n). Przykład Wejście: 8 2 4 9 3 6 Wyjście: 2 3 4 6 8 9 Uwaga! Na U moga składać się zarówno liczby całkowite lub rzeczywiste, jak i U może być zbiorem rekordów, które należy posortować według ich kluczy. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 31 / 44
Popularne algorytmy sortowania Sortowanie przez porównywanie elementów: Sortowanie przez proste wybieranie (ang. selection sort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie babelkowe (ang. bubblesort) Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 32 / 44
Popularne algorytmy sortowania Sortowanie przez porównywanie elementów: Sortowanie przez proste wybieranie (ang. selection sort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie babelkowe (ang. bubblesort) Inne - będa omawiane na przedmiocie ASD Sortowanie przez scalanie (ang. merge sort) sortowanie szybkie (ang. quicksort) Sortowanie przez zliczanie (ang. counting sort) Sortowanie pozycyjne (ang. radix sort) sortowanie przez kopcowanie (ang. heapsort) Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 32 / 44
Sortowanie przez proste wybieranie Idea Sortowanie przez wybieranie polega na tym, że w każdym kroku znajdujemy najmniejszy element w sortowanym ciagu, po czym przenosimy ten element na odpowiednią pozycję do ciagu wynikowego (przez zamianę elementów miejscami). Sortowanie odbywa się w n-1 przebiegach. W i-tym przebiegu szukamy i-tego najmniejszego (największego) elementu. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 33 / 44
Sortowanie przez proste wybieranie Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} 1: for all i := 0 to n 2 do 2: min := i; 3: for all j := i + 1 to n 1 do 4: if A[j] < A[min] then 5: min := j; 6: end if 7: j := j + 1; 8: end for {zamiana elementu A[min] z elementem A[i] w tablicy A} 9: zamiana (A, min, i); 10: i := i + 1; 11: end for Ze względu na dwie zagnieżdżone pętle, z których każda wykonuje się dokładnie n razy, algorytm wymaga n n porównań, aby posortować n elementowy ciag, czyli jest w klasie O(n 2 ). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 34 / 44
Sortowanie przez proste wybieranie - Przykład nr iteracji - i Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 1 [0,1,6,8,4,3,2,9] 1 - na właściwej pozycji 2 [0,1,6,8,4,3,2,9] 2 3 [0,1,2,8,4,3,6,9] 3 4 [0,1,2,3,4,8,6,9] 4 5 [0,1,2,3,4,8,6,9] 6 6 [0,1,2,3,4,6,8,9] 8 7 [0,1,2,3,4,6,8,9] 9 - na właściwej pozycji Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 35 / 44
Sortowanie przez proste wybieranie - Przykład K r o k i a l g o r y t m u Klucze i = 2 i = 3 i = 4 i = 5 i = 6 44 55 12 42 94 18 06 67 06 55 12 42 94 18 44 67 06 12 55 42 94 18 44 67 06 12 18 42 94 55 44 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 36 / 44
Sortowanie przez wstawianie Idea Sortowanie przez wstawianie odbywa się w n 1 przebiegach. W i-tym przebiegu elementy na pozycjach 1,...,(i 1) sa już uporzadkowane, a wstawiany i-ty element przepycha się do przodu na właściwe miejsce, tak by stworzył wraz z innymi ciag uporzadkowany długości i. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 37 / 44
Sortowanie przez wstawianie - przykład 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 2 3 4 8 9 6 2 3 4 6 8 9 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 38 / 44
Sortowanie przez wstawianie Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} 1: for i := 1 to n 1 do 2: key := A[i]; 3: j := i 1; 4: while j 0 and A[j] > key do 5: A[j + 1] := A[j]; 6: j := j 1; 7: end while 8: A[j + 1] := key; 9: end for Ze względu na dwie zagnieżdżone pętle, z których każda wykonuje się dokładnie n razy, algorytm wymaga n n porównań, aby posortować n elementowy ciag, czyli jest w klasie O(n 2 ). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 39 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 [1,4,3,6,8,9,2,0] 3 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 [1,4,3,6,8,9,2,0] 3 [1,3,4,6,8,9,2,0] 3 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 [1,4,3,6,8,9,2,0] 3 [1,3,4,6,8,9,2,0] 3 6 [1,2,3,4,6,8,9,0] 2 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 [1,4,3,6,8,9,2,0] 3 [1,3,4,6,8,9,2,0] 3 6 [1,2,3,4,6,8,9,0] 2 7 [1,2,3,4,6,8,9,0] 0 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 40 / 44
Sortowanie przez wstawianie - przykład K r o k i a l g o r y t m u Klucze i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 44 55 12 42 94 18 06 67 44 55 12 42 94 18 06 67 12 44 55 42 94 18 06 67 12 42 44 55 94 18 06 67 12 42 44 55 94 18 06 67 12 18 42 44 55 94 06 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 41 / 44
Sortowanie babelkowe W sortowaniu babelkowym liczby zachowuja się jak babelki, po kolei, jedna po drugiej ida do góry (lub w prawo). Sortowanie babelkowe jest wykonywane w n 1 fazach. W fazie i-tej wyznaczany jest i-ty najmniejszy/największy element. Idea Sprawdzamy cały ciag od końca. Jeżeli trafimy na parę elementów, w której większy poprzedza mniejszy, to zamieniamy je miejscami. Czynność powtarzamy tak długo, aż podczas sprawdzania całego ciagu, nie zajdzie ani jedna zamiana elementów. Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 42 / 44
Sortowanie babelkowe Require: tablica A o rozmiarze n {A=[0],...,A[n-1]} 1: for i := 0 to n 1 do 2: for j := n downto i + 1 do 3: if A[j 1] > A[j] then 4: Zamiana(A, j 1, j); 5: end if 6: end for 7: end for Ze względu na dwie zagnieżdżone pętle, z których każda wykonuje się dokładnie n razy, algorytm wymaga n n porównań, aby posortować n elementowy ciag, czyli jest w klasie O(n 2 ). Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 43 / 44
Sortowanie babelkowe - przykład 44 Klucze i = 1 06 55 44 12 55 42 12 94 42 18 94 06 18 67 67 i = 2 K r o k i a l g o r y t m u i = 3 06 06 12 12 44 18 55 44 18 55 42 42 94 67 67 94 i = 4 06 12 18 42 44 55 67 94 i = 5 06 12 18 42 44 55 67 94 i = 6 06 12 18 42 44 55 67 94 i = 7 06 12 18 42 44 55 67 94 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 7 i 8 44 / 44