PORZĄDEK WŚRÓD INFORMACJI KLUCZEM DO SZYBKIEGO WYSZUKIWANIA Maciej M. Sysło Uniwersytet Wrocławski Uniwersytet UMK w Toruniu syslo@ii.uni.wroc.pl informatyka + 2
Algorytm, algorytmika Algorytm opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia jakiegoś celu Pierwszy algorytm algorytm Euklidesa 300 p.n.e algorytm od Muhammad ibn Musa al-chorezmi IX w. Algorytmika dziedzina zajmująca się algorytmami i ich własnościami informatyka + 3
Algorytmy a informatyka Informatyka jedna z definicji: dziedzina wiedzy i działalności zajmująca się algorytmami Donald E. Knuth: Ralf Gomory (IBM): Czy zajmuje się też algorytmami kulinarnymi? Mówi się często, że człowiek dotąd nie zrozumie czegoś, zanim nie nauczy tego kogoś innego. W rzeczywistości, człowiek nie zrozumie czegoś (algorytmu) naprawdę, zanim nie zdoła nauczyć tego komputera. Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami) informatyka + 4
Myślenie algorytmiczne Myślenie komputacyjne (ang. computational thinking) Reklama firmy IBM z 1924 roku Komputer to maszyna do myślenia!!! informatyka + 5
IBM informatyka + 6
Problemy, algorytmy i ich komputerowe realizacje (implementacje) Plan: Poszukiwanie informacji: w zbiorze nieuporządkowanym w zbiorze uporządkowanym Przeszukiwanie zbioru: schemat blokowy, algorytm optymalny Kompletowanie podium zwycięzców turnieju Jednoczesne znajdowanie najmniejszego i największego elementu zasada dziel i zwyciężaj Porządkowanie: przez wybór, przez zliczanie, przez scalanie Inne zastosowania zasady dziel i zwyciężaj informatyka + 7
Poszukiwanie elementu w zbiorze Problem poszukiwania elementu w zbiorze specyfikacja Dane: Zbiór elementów w postaci ciągu n liczb x 1, x 2,..., x n. Wyróżniony element y Wynik: Jeśli y należy do tego zbioru, to podaj jego miejsce (indeks) w ciągu, a w przeciwnym razie sygnalizuj brak takiego elementu w zbiorze wstaw y do ciągu Dwa przypadki: Nieuporządkowany ciąg liczb x 1, x 2,..., x n Uporządkowany ciąg liczb x 1, x 2,..., x n Nasz cel: Jakie są korzyści z uporządkowania? Jak utrzymywać porządek wśród informacji? informatyka + 8
Poszukiwanie elementu w zbiorze przykład Przeszukiwanie książki telefonicznej Poszukiwanie numeru telefonu danej osoby Dane: Nazwiska, adresy, numery telefonów książka telefoniczna. Ciąg danych x 1, x 2,..., x n kartki książki z danymi o numerach Wyróżniony element y nazwisko osoby, której numeru szukamy Wynik: Jeśli osoba y ma numer telefony w książce, to podaj na której stronie, a w przeciwnym razie sygnalizuj brak danych o y Poszukiwanie osoby o danym numerze telefonu Dane: Książka telefoniczna. Ciąg danych x 1, x 2,..., x n kartki książki z danymi o numerach Wyróżniony element y numer telefonu osoby, której szukamy Wynik: Jeśli istnieje osoba z numerem telefonu y, to podaj jej nazwisko, a w przeciwnym razie sygnalizuj brak takiej osoby informatyka + 9
Poszukiwania w zbiorze nieuporządkowanym Algorytm Poszukiwanie liniowe Krok 1. Dla i = 1, 2,..., n, jeśli x i = y, to przejdź do kroku 3. Krok 2. Komunikat: W ciągu danych nie ma elementu równego y. Zakończ algorytm: wynik: 1 Krok 3. Element równy y znajduje się na miejscu i w ciągu danych. Zakończ algorytm: wynik: i begin i:=1; while (x[i]<>y) and (i<n) do i:=i+1; if x[i]=y then PrzeszukiwanieLiniowe:=i else PrzeszukiwanieLiniowe:=-1 end Przykład: Dane: ciąg: 2, 5, 1, 4, 10, 7. y = 1 Wynik: i = 3 Pewna niedogodność sprawdzanie, czy koniec ciągu. informatyka + 10
Poszukiwania w zbiorze nieuporządkowanym z wartownikiem Algorytm Poszukiwanie liniowe z wartownikiem Takie same kroki algorytmu inna implementacja, czyli komputerowa realizacja: na końcu ciągu: begin i:=1; x[n+1]:=y; x 1 x 2 x 3 x 4 x n while x[i]<>y do i:=i+1; if i<=n then PrzeszukiwanieLinioweWartownik:=i else PrzeszukiwanieLinioweWartownik:=-1 end x n+1 wstawiamy wartownika pilnuje końca ciągu Nie ma sprawdzania, czy koniec ciągu informatyka + 11
Poszukiwanie w zbiorze uporządkowanym Zabawa w zgadywanie liczby Zgadywana liczba: 17 w przedziale [1 : 20] Metoda: połowienia przedziału Kolejne kroki: strzałka wskazuje wybór; kolor czerwony ciąg do przeszukania: informatyka + 12
Poszukiwanie przez połowienie w ciągu uporządkowanym function PrzeszukiwanieBinarne(x:tablicax; k,l:integer; y:integer):integer; {Przeszukiwanie binarne ciagu x[k..l] w poszukiwaniu elementu y.} var Lewy,Prawy,Srodek:integer; begin Lewy:=k; Prawy:=l; while Lewy<=Prawy do begin Srodek:=(Lewy+Prawy) div 2; if x[srodek]=y then begin PrzeszukiwanieBinarne:=Srodek; exit end; {element y nalezy do przeszukiwanego ciagu} if x[srodek]<y then Lewy:=Srodek+1 else Prawy:=Srodek-1 end; PrzeszukiwanieBinarne:=-1 end Początkowe końce przedziału Połowienie przedziału y należy do przedziału Zmiana końców przedziału y nie należy do przeszukiwanego przedziału informatyka + 13
Umieszczanie przez połowienie w ciągu uporządkowanym Dane: Uporządkowany ciąg liczb w tablicy x[k..l] oraz element y Wynik: Miejsce dla y w ciągu x[k..l] takie, aby po wstawieniu y ciąg nadal był uporządkowany Algorytm: y wstawiamy do przeszukiwanego ciągu w to miejsce, gdzie algorytm poszukiwania kończy działanie, a więc tam, gdzie jest y (jeśli y jest już w ciągu), albo gdzie powinien być. informatyka + 14
Poszukiwanie przez połowienie Złożoność (1) Liczba kroków w algorytmie połowienia: Ile razy należy przepołowić ciąg o danej długości, aby znaleźć element lub miejsce dla niego? Przykład dla n = 1200 Kolejne długości ciągu: 1200, 600, 300, 150, 75, 38, 19, 10, 5, 3, 2, 1 11 razy dzielono ciąg o długości 1200, by pozostał 1 element Liczba porównań w algorytmach poszukiwania dla n = 1200: przez połowienie 11 liniowy 1200 Porównaj, jaka jest potęga uporządkowania!!! informatyka + 15
Dla n = 1200 liczba porównań w algorytmie połowienia wyniosła 11 Pytania: Poszukiwanie przez połowienie złożoność (2) Jak liczba porównań zależy od n? Jak dobry jest to algorytm? Liczba porównań dla różnych n: n 100 7 1 000 10 10 000 14 100 000 17 1 000 000 20 10 000 000 24 liczba porównań ok.log 2 n Algorytm poszukiwania przez połowienie jest optymalny, czyli najszybciej przeszukuje zbiory uporządkowane. Funkcja logarytm, bardzo ważna w algorytmice logarytm to anagram od algorytm informatyka + 16
Poszukiwanie interpolacyjne function PrzeszukiwanieBinarne(x:tablicax; k,l:integer; y:integer):integer; {Przeszukiwanie binarne ciagu x[k..l] w poszukiwaniu elementu y.} var Lewy,Prawy,Srodek:integer; begin Lewy:=k; Prawy:=l; while Lewy<=Prawy do begin Srodek:=(Lewy+Prawy) div 2; if x[srodek]=y then begin PrzeszukiwanieBinarne:=Srodek; exit end; {element y nalezy do przeszukiwanego ciagu} if x[srodek]<y then Lewy:=Srodek+1 else Prawy:=Srodek-1 end; PrzeszukiwanieBinarne:=-1 end Srodek = lewy + (prawy lewy)/2 Srodek = lewy + (y x[lewy])(prawy lewy)/(x[prawy] x[lewy]) Przeciętny czas interpolacyjnego umieszczania wynosi ok. log log n informatyka + 17
Suwaki logarytmiczne Na wyposażeniu każdego inżyniera do 1972 roku Skala 30 cm Skala 150 cm Skala 12 m informatyka + 18 18
Znajdowanie elementu w zbiorze Znajdź w zbiorze element o pewnych własnościach: najwyższego ucznia w swojej klasie metoda spaghetti jak zmieni się Twój algorytm, jeśli chciałbyś znaleźć w klasie najniższego ucznia znajdź w swojej klasie ucznia, któremu droga do szkoły zabiera najwięcej czasu znajdź najstarszego (lub najmłodszego) ucznia w swojej szkole znajdź największą kartę w potasowanej talii kart znajdź najlepszego tenisistę w swojej klasie nie ma remisów znajdź najlepszego gracza w warcaby w swojej klasie możliwe są remisy Podstawowa operacja porównanie: dwóch liczb lub kombinacji liczb (data, karty): czy x < y? dwóch zawodników: rozegranie meczu informatyka + 19
Znajdowanie elementu w zbiorze Różnica między dwoma problemami: Czy zbiór zawiera y? Dane: Ciąg n liczb x 1, x 2,..., x n Wyróżniony element y Wynik: Czy w ciągu jest element y? Przeszukujemy ciąg aż znajdziemy y, Przeglądamy cały ciąg, by stwierdzić, że nie zawiera y. Znajdź w zbiorze element o pewnych własnościach Dane: Ciąg n liczb x 1, x 2,..., x n Wynik: Najmniejsza wśród liczb x 1, x 2,..., x n Trzeba przejrzeć cały ciąg. Zakładamy, że ciąg nie jest uporządkowany. Uporządkowanie ciągu ułatwia. informatyka + 20
Specyfikacja problemu Specyfikacja problemu dokładne opisanie problemu Problem Min Znajdowanie najmniejszego elementu w zbiorze Dane: Liczba naturalna n i zbiór n liczb dany w ciągu x 1, x 2,..., x n Wynik: Najmniejsza wśród liczb x 1, x 2,..., x n oznaczmy ją min Metoda rozwiązania: przeszukiwanie liniowe od lewej do prawej Algorytm Min Znajdowanie najmniejszego elementu w zbiorze Krok 1. Przyjmij za min pierwszy element w zbiorze (w ciągu), czyli przypisz min := x 1. imin := 1 Krok 2. Dla kolejnych elementów x i, gdzie i = 2, 3,..., n, jeśli min > x i, to przypisz min := x i. imin := i Algorytm Max prosta modyfikacja: zamiana > na < Wyznaczanie imin indeksu elementu o wartości min informatyka + 21
Algorytm Min demo Demonstracja przeszukiwania od lewej do prawej: informatyka + 22
(Zgrubny) schemat blokowy algorytmu Min Krok 1: min pierwszy element ze zbioru A Instrukcje warunkowe: rozgałęzienia algorytmu Krok 2: Czy porównano wszystkie elementy ze zbioru A? Instrukcja iteracyjna Tak Koniec algorytmu Nie x kolejny element ze zbioru A Tak min x min > x? Nie Ada Augusta, córka Byrona, uznawana powszechnie za pierwszą programistkę komputerów, przełomowe znaczenie maszyny analitycznej Ch. Babbage a, pierwowzoru dzisiejszych komputerów, upatrywała właśnie w możliwości wielokrotnego wykonywania przez nią danego ciągu instrukcji, z liczbą powtórzeń z góry zadaną lub zależną od wyników obliczeń, a więc w iteracji. informatyka + 23
Pełny schemat blokowy algorytmu Min informatyka + 24
Algorytm Min w postaci programu Program w języku Pascal program Min; var i,imin,min,n,x:integer; begin read(n); read(x); min:=x; imin:=1; for i:=2 to n do begin read(x); if min > x then begin min:=x; imin:=i end end; write(imin,min) end. nazwa programu deklaracje, typy zmiennych blok programu początek czytaj n czytaj pierwszy element iteracja od 2 do n czytaj kolejny element instrukcja warunkowa popraw min instrukcja war. koniec iteracja koniec pisz wynik blok programu koniec informatyka + 25
Pracochłonność algorytmu Min Porównanie podstawowa operacja w algorytmie Min. Pracochłonność (złożoność obliczeniowa) algorytmu liczba podstawowych operacji wykonywanych przez algorytm. Pytanie: Ile porównań wykonuje algorytm Min? Odpowiedź: o jedno mniej niż jest elementów, czyli n 1 Pytania: Czy można szybciej? Czy istnieje szybszy algorytm znajdowania min? A może metoda pucharowa wyłaniania zwycięzcy w turnieju jest szybsza? informatyka + 26
Wyłanianie najlepszego zawodnika w turnieju czyli inny sposób znajdowania max (lub min) Porównania mecze Tomek Ośmiu zawodników: 7 meczy n zawodników: n 1 meczy a więc nie jest szybsza Bartek Tomek Jednak jest szybciej. Gdy liczmy równolegle Bartek Witek Tomek Tolek Bartek Romek Bolek Witek Tomek Zenek Tolek Felek informatyka + 27
A może mamy algorytm najlepszy? Podsumowanie: Mamy dwa algorytmy znajdowania min lub max: przeszukiwanie liniowe rozegranie turnieju które na zbiorze n elementów wykonują n 1 porównań Może nie ma szybszego algorytmu? TAK! Hugo Steinhaus tak to uzasadnił: Jeśli Tomek jest zwycięzcą turnieju, w którym startuje n zawodników, to każdy inny spośród n 1 zawodników musiał przegrać przynajmniej raz, a zatem rozegrano przynajmniej n 1 meczy. Zatem każdy algorytm musi wykonać przynajmniej n 1 porównań, czyli nasze algorytmy są najszybsze są optymalne. informatyka + 28
A jak znaleźć drugiego najlepszego zawodnika w turnieju? Czy jest nim Bartek? Bo przegrał z Tomkiem? Tomek Ale Bartek nie grał z drugą połową! Bartek Tomek??? Tylko dwa dodatkowe mecze! Bartek Witek Tomek??? Tolek Bartek Romek Bolek Witek Tomek Zenek Tolek Felek informatyka + 29
Jednoczesne znajdowanie min i max Obserwacja: jeśli x y, to x kandydatem na min, a y kandydatem na max Algorytm dziel i zwyciężaj : Krok 1. Podział na kandydatów na min i kandydatów na max Kandydaci na max Porównania parami Kandydaci na min 3 2 5 3? 1 2? 2 5? 3 4? 8 2? 5 1 2 3 4 2 8 5 max = 8 min = 1 Krok 2. Znajdź min i max Liczba porównań: algorytm naiwny: n 1 (min) + n 2 (max) = 2n 3 algorytm dziel i zwyciężaj: n/2(podział)+ (n/2 1)(min) + (n/2 1)(max) ok. 3n/2 2 jest to algorytm optymalny informatyka + 30
Problem porządkowania (sortowania) Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,..., x n Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do największej Algorytm: porządkowanie przez wybór Selection Sort Idea: najmniejszy wśród nieuporządkowanych daj na początek Krok 1. Dla i = 1, 2,..., n 1 wykonaj kroki 2 i 3, a następnie zakończ algorytm Krok 2. Znajdź k takie, że x k jest najmniejszym elementem w ciągu x i,..., x n Krok 3. Zamień miejscami elementy x i oraz x k informatyka + 31
Znajdowanie elementu w zbiorze Podsumowanie Różnica między dwoma problemami: Czy zbiór zawiera y? Dane: Ciąg n liczb x 1, x 2,..., x n Wyróżniony element y Wynik: Czy w ciągu jest element y? Przeszukujemy ciąg aż znajdziemy y, Przeglądamy cały ciąg, by stwierdzić, że nie zawiera y. Znajdź w zbiorze element o pewnych własnościach Dane: Ciąg n liczb x 1, x 2,..., x n Wynik: Najmniejsza wśród liczb x 1, x 2,..., x n Trzeba przejrzeć cały ciąg. Zakładamy, że ciąg nie jest uporządkowany. Uporządkowanie ciągu ułatwia. informatyka + 32
Porządkowanie przez wybór demo (1) Żółte podciąg już uporządkowany Zielone i czerwone podciąg porządkowany informatyka + 33
Porządkowanie przez wybór demo (2) Podciąg już uporządkowany Podciąg porządkowany informatyka + 34
Złożoność porządkowania przez wybór Liczba zamian elementów w kolejnych krokach: 1 + 1 + 1 + + 1 = n 1 Liczba porównań w kolejnych krokach: Przykład n = 6 (n 1) + (n 2) + (n 3) + + 3 + 2 + 1 =? 5 4 3 2 1 6 = n 5 = n 1 Pole prostokąta: 5 x 6 Suma = pole czarnych diamentów: 5 x 6 informatyka + 35 2 Ogólnie suma: (n 1) x n 2 Liczby trójkątne
Porządkowanie przez zliczanie Problem porządkowania niewielkich liczb Dane: Liczba naturalna n i ciąg n liczb całkowitych x 1, x 2,..., x n, należących do przedziału [1..M] na ogół n < M. Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do największej Algorytm. Porządkowanie przez zliczanie CountingSort Idea: Liczymy, ile jest konkretnych liczb w ciągu Krok 1. Dla i = 1, 2,..., M: c i = 0 zerowanie liczników. Krok 2. Dla i = 1, 2,..., n: zwiększ c k o 1, gdzie k = x i. Krok 3. Dla i = 1, 2,..., M: na kolejnych c i pozycjach w ciągu x umieść element i. Liczba operacji proporcjonalna do n + M. informatyka + 36
Sortowanie przez scalanie scalanie Scalanie z dwóch uporządkowanych ciągów utwórz jeden uporządkowany Algorytm scalania. Scal. Dane: dwa ciągi uporządkowane Wynik: scalony ciąg uporządkowany Krok: do tworzonego ciągu pobieraj najmniejszy element z czoła scalanych ciągów Scalanie 1 3 5 7 10 12 1 2 6 9 11 15 17 20 Scalane ciągi 1 3 5 7 10 12 1 2 6 9 11 15 17 20 Scalony ciąg 1 1 2 3 5 6 7 9 10 11 12 15 17 20 informatyka + 37
Sortowanie przez scalanie scalanie Scalane ciągi Scalone ciągi, w innym miejscu informatyka + 38
Sortowanie przez scalanie opis Metoda dziel i zwyciężaj Rekurencyjne wywołania na podciągach Algorytm porządkowania przez scalanie MergeSort(l,p,x) Dane: Ciąg liczb x l, x l+1,, x p Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do największej. Krok 1. Jeśli l < p, to przyjmij s:=(l+p) div 2 i wykonaj trzy następne kroki. { s w połowie ciągu} Krok 2. MergeSort(l,s,x) sortowanie pierwszej połowy ciągu Krok 3. MergeSort(s+1,p,x) sortowanie drugiej połowy ciągu Krok 4. Zastosuj algorytm Scal do ciągów (x l,, x s ) i (x s+1,, x p ) i wynik umieść w ciągu (x l,, x p ). informatyka + 39
Sortowanie przez scalanie DEMO 2 1 2 9 5 0 2 1 2 1 2 dziel 2 dziel 9 5 9 5 0 dziel 0 dziel 2 1 scal 9 dziel scal 5 1 2 scal 5 9 scal 1 2 2 scal 0 5 9 0 1 2 2 5 9 informatyka + 40
Sortowanie przez scalanie DEMO Posortowana jest już pierwsza połowa ciągu i w trakcie sortowania drugiej połowy, scalane są dwa podciągi z pierwszej części drugiej połowy, uporządkowane wcześniej rekurencyjnie tą samą metodą Posortowana pierwsza połowa ciągu Scalane ciągi Wynik scalania dodatkowym miejscu informatyka + 41
Potęga algorytmu binarnego (dziel i zwyciężaj) Kryptografia: Szyfr RSA, jeden z najpopularniejszych obecnie, bazuje na podnoszeniu do dużej potęgi dużych liczb, np. 1234567890987654321234567890987654321123456789987654321 1234567890 12345678909876543211234567890987654321123456789098765432123456789101 234567891012345678910123456789123456789123456789123456789 Jak można szybko obliczać takie potęgi? Odpowiedź: Np., obliczenie x 12345678912345678912345678912345 wymaga: Ze szkolnej definicji: x 10 = x*x*x*x*x*x*x*x*x*x 9 mnożeń, wtedy: 12345678912345678912345678912344/10 15 sek. = 4*10 8 lat Algorytm binarny, np.: x 10 = (x 5 ) 2, x 11 = (x 5 ) 2 *x Wykonuje dla x 12345678912345678912345678912345 Szybkość superkomputera ok. 200 mnożeń < 1 sek. informatyka + 42
Konkluzja Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami) [Ralf Gomory, IBM] 43 43
Algorytm, algorytmika Algorytm opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia jakiegoś celu Pierwszy algorytm algorytm Euklidesa 300 p.n.e algorytm od Muhammad ibn Musa al-chorezmi IX w. Algorytmika dziedzina zajmująca się algorytmami i ich własnościami informatyka + 44
Algorytmy a informatyka Informatyka jedna z definicji: dziedzina wiedzy i działalności zajmująca się algorytmami Donald E. Knuth: Ralf Gomory (IBM): Czy zajmuje się też algorytmami kulinarnymi? Mówi się często, że człowiek dotąd nie zrozumie czegoś, zanim nie nauczy tego kogoś innego. W rzeczywistości, człowiek nie zrozumie czegoś (algorytmu) naprawdę, zanim nie zdoła nauczyć tego komputera. Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami) informatyka + 45
Algorytmiczne rozwiązywanie problemu Dla problemu chcemy otrzymać rozwiązanie komputerowe, które jest: zrozumiałe dla każdego, kto zna problemu poprawne, czyli spełnia specyfikację (opis) problemu efektywne, czyli nie marnuje czasu i pamięci Metoda rozwiązywania: analiza sytuacji problemowej sporządzenie specyfikacji: wykaz danych, wyników i relacji projekt rozwiązania komputerowa realizacja rozwiązania implementacja testowanie poprawności rozwiązania dokumentacja i prezentacja rozwiązania informatyka + 46
Rozwiązywanie problemów z pomocą komputerów Objaśnienie dwóch terminów: Problem: problem, gdy nie podano nam, jak należy go rozwiązać, ale wiemy wystarczająco, by poradzić sobie z nim a więc, problem jest dla każdego nie tylko dla orłów Programowanie: komputery wykonują tylko programy cokolwiek uruchamiamy na komputerze: Google, dokument w Word, arkusz w Excel, naciśnięcie klawisza jest programem każdy widoczny i niewidoczny efekt działania komputera to wynik działania jakiegoś programu Konkluzja: powinniśmy lepiej poznać programowanie komputerów informatyka + 47
Pokrewne zajęcia w Projekcie Informatyka + Wykład+Warsztaty (Wszechnica Poranna): Wprowadzenie do algorytmiki i programowania wyszukiwanie i porządkowanie informacji Proste rachunki wykonywane za pomocą komputera. Techniki algorytmiczne przybliżone (heurystyczne) i dokładne. Wykłady (Wszechnica Popołudniowa): Czy wszystko można policzyć na komputerze? Porządek wśród informacji kluczem do szybkiego wyszukiwania. Dlaczego możemy się czuć bezpieczni w sieci, czyli o szyfrowaniu informacji. Znajdowanie najkrótszych dróg, najniższych drzew, najlepszych małżeństw informatyka + 48
Pokrewne zajęcia w Projekcie Informatyka + Kursy (24 godz.) Wszechnica na Kołach: Algorytmy poszukiwania i porządkowania. Elementy języka programowania Różnorodne algorytmy obliczeń i ich komputerowe realizacje Grafy, algorytmy grafowe i ich komputerowe realizacje Kursy (24 godz.) Kuźnia Informatycznych Talentów KIT dla Orłów: Przegląd podstawowych algorytmów Struktury danych i ich wykorzystanie Zaawansowane algorytmy Tendencje Wykłady Algorytmy w Internecie, K. Diks Czy P = NP, czyli jak wygrać milion dolarów w Sudoku, J. Grytczuk Między przeszłością a przyszłość informatyki, M.M Sysło informatyka + 49