• Nie Znaleziono Wyników

Wprowadzenie do algorytmiki i programowania.NET

N/A
N/A
Protected

Academic year: 2021

Share "Wprowadzenie do algorytmiki i programowania.NET"

Copied!
36
0
0

Pełen tekst

(1)

(2) WYSZUKIWANIE I PORZĄDKOWANIE INFORMACJI WPROWADZENIE DO ALGORYTMIKI Maciej M. Sysło. Uniwersytet Wrocławski Uniwersytet UMK w Toruniu syslo@ii.uni.wroc.pl. informatyka +. 2.

(3) 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.

(4) Algorytmy a informatyka Informatyka – jedna z definicji: dziedzina wiedzy i działalności zajmująca się algorytmami Czy zajmuje się też algorytmami kulinarnymi? Donald E. Knuth: 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.. Ralf Gomory (IBM): Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami). informatyka +. 4.

(5) 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 +. 5.

(6) 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 +. 6.

(7) Myślenie algorytmiczne Myślenie komputacyjne (ang. computational thinking). Reklama firmy IBM z 1924 roku. Komputer to maszyna do myślenia !!!. informatyka +. 7.

(8) Problemy, algorytmy i ich komputerowe realizacje (implementacje) Plan: • Pierwszy algorytm – przeszukiwanie zbioru • schematy blokowe • 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 – iteracja algorytmu • Poszukiwanie informacji: • w zbiorze nieuporządkowanym • w zbiorze uporządkowanym. informatyka +. 8.

(9) Znajdowanie elementu w zbiorze Znajdź element w zbiorze: • 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): • dwóch zawodników:. informatyka +. czy x < y ? rozegranie meczu. 9.

(10) 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 x1, x2, ..., xn Wynik: Najmniejsza wśród liczb x1, x2, ..., xn – 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), imin := 1 czyli przypisz min := x1. Krok 2. Dla kolejnych elementów xi, gdzie i = 2, 3, ..., n, imin := i jeśli min > xi, to przypisz min := xi.. Algorytm Max – prosta modyfikacja: zamiana > na < Wyznaczanie imin – indeksu elementu o wartości min. informatyka +. 10.

(11) Algorytm Min – demo Demonstracja przeszukiwania od lewej do prawej:. informatyka +. 11.

(12) (Zgrubny) schemat blokowy algorytmu Min Krok 1:. Krok 2:. Instrukcje warunkowe: rozgałęzienia algorytmu. min ← pierwszy element ze zbioru A. Czy porównano wszystkie elementy ze zbioru A ? Tak Koniec algorytmu. Instrukcja iteracyjna. Nie x ← kolejny element ze zbioru A. Nie min > x ? Tak min ← x. 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 +. 12.

(13) Pełny schemat blokowy algorytmu Min. informatyka +. 13.

(14) Skomputeryzowany schemat blokowy Schemat blokowy wykonany w programie ELI. Iteracja. Wprowadzanie danych Ciąg (tablica) z danymi. Bloki warunkowe. informatyka +. 14.

(15) 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.. informatyka +. 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. 15.

(16) Warsztaty. Algorytm, język programowania, komputer Proces komputerowej realizacji algorytmu: • Opis algorytmu • Zapis w języku programowania (Pascal, C++) • Przetłumaczenie na język zrozumiały przez komputer • Wykonanie • Testowanie. informatyka +. 16.

(17) 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 +. 17.

(18) Wyłanianie najlepszego zawodnika w turnieju czyli inny sposób znajdowania max (lub min) Porównania – mecze. Ośmiu zawodników: 7 meczy n zawodników: n – 1 meczy a więc nie jest szybsza. Tomek. Tomek. Bartek. Bartek. Bartek. Romek. Witek. Bolek. Witek. Tomek. Tomek. Zenek. informatyka +. Tolek. Tolek. Felek. 18.

(19) 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 +. 19.

(20) A jak znaleźć drugiego najlepszego zawodnika w turnieju? Tomek. Ale Bartek nie grał z drugą połową!. Czy jest nim Bartek? Bo przegrał z Tomkiem?. Tomek ???. Bartek. Bartek. Bartek. Romek. Witek. Bolek. Witek. ??? Tomek. Tomek. Zenek. informatyka +. Tylko dwa dodatkowe mecze!. Tolek. Tolek. Felek. 20.

(21) 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. 5. 8. ↑. ↑. ↑. 3 ? 1. 2 ? 2. 5 ? 3. ↓. ↓. 1. 2. 3. ↓. Kandydaci na min. 5. 2. 3. ↑. ↑. 4 ? 8. 2 ? 5. ↓. ↓. 4. 2. 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 +. 21.

(22) Problem porządkowania (sortowania) Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x1, x2, ..., xn 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 xk jest najmniejszym elementem w ciągu xi, ..., xn Krok 3. Zamień miejscami elementy xi oraz xk. informatyka +. 22.

(23) Porządkowanie przez wybór – demo (1) Żółte – podciąg już uporządkowany. Zielone i czerwone – podciąg porządkowany. informatyka +. 23.

(24) Porządkowanie przez wybór – demo (2). Podciąg już uporządkowany Podciąg porządkowany. informatyka +. 24.

(25) 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: (n – 1) + (n – 2) + (n – 3) + … + 3 + 2 + 1 = ?. Przykład n=6. Pole prostokąta: 5 x 6 Suma = pole czarnych diamentów:. 5. ♦. ♦. ♦. ♦. ♦. ∇. 5x6. 4. ♦. ♦. ♦. ♦. ∇. ∇. 2. 3. ♦. ♦. ♦. ∇. ∇. ∇. 2. ♦. ♦. ∇. ∇. ∇. ∇. 1. ♦. ∇. ∇. ∇. ∇. 5=n–1. ∇. 6=n. informatyka +. Ogólnie suma: (n – 1) x n 2. Liczby trójkątne. 25.

(26) Poszukiwanie elementu w zbiorze Problem poszukiwania elementu w zbiorze Dane: Zbiór elementów w postaci ciągu n liczb x1, x2, ..., xn. 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 x1, x2, ..., xn • Uporządkowany ciąg liczb x1, x2, ..., xn. Nasz cel: Jakie są korzyści z uporządkowania? Jak utrzymywać porządek wśród informacji?. informatyka +. 26.

(27) Poszukiwania w zbiorze nieuporządkowanym Algorytm – Poszukiwanie liniowe Krok 1. Dla i = 1, 2, ..., n, jeśli xi = 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. Pewna niedogodność – sprawdzanie, czy koniec ciągu.. 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. informatyka +. 27.

(28) 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: wstawiamy wartownika x x x x x … x n+1 1. 2. 3. 4. n. – pilnuje końca ciągu. begin i:=1; Nie ma sprawdzania, x[n+1]:=y; czy koniec ciągu while x[i]<>y do i:=i+1; if i<=n then PrzeszukiwanieLinioweWartownik:=i else PrzeszukiwanieLinioweWartownik:=-1 end. informatyka +. 28.

(29) Poszukiwanie w zbiorze uporządkowanym Zabawa w zgadywanie liczby Zgadywana liczba: Metoda: Kolejne kroki:. 17 w przedziale [1 : 20]. połowienia przedziału strzałka wskazuje wybór; kolor czerwony – ciąg do przeszukania:. informatyka +. 29.

(30) 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; Początkowe końce przedziału begin Lewy:=k; Prawy:=l; while Lewy<=Prawy do begin Połowienie przedziału Srodek:=(Lewy+Prawy) div 2; if x[Srodek]=y then begin y należy do przedziału PrzeszukiwanieBinarne:=Srodek; exit end; {element y nalezy do przeszukiwanego ciagu} if x[Srodek]<y then Lewy:=Srodek+1 else Prawy:=Srodek-1 Zmiana końców przedziału end; PrzeszukiwanieBinarne:=-1 y nie należy do end przeszukiwanego przedziału. informatyka +. 30.

(31) 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 +. 31.

(32) Poszukiwanie przez połowienie złożoność. 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 • liniowy. 11 1200. Porównaj, jaka jest potęga uporządkowania !!!. informatyka +. 32.

(33) Poszukiwanie przez połowienie złożoność – dla orłów. Dla n = 1200 liczba porównań w algorytmie połowienia wyniosła 11 Pytania: • Jak liczba porównań zależy od n? • Jak dobry jest to algorytm?. Liczba porównań dla różnych n: n 100 1000 10000 100000 1000000 10000000. liczba porównań 7 10 14 17 20 24. 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. ok.log2 n. informatyka +. 33.

(34) 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 +. 34.

(35) 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 +. 35.

(36)

(37)

Cytaty

Powiązane dokumenty

Które z wªasno±ci relacji równowa»no±ci i racjonalnej preferencji maj¡ relacje z zadania 1?. Je±li która± z tych relacji jest równowa»no±ci¡, poda¢ jej

Udowodnił niemożliwość rozwiązania równania algebraicznego stopnia wyższego niż cztery przez pierwiastniki, prowadził badania w dziedzinie teorii szeregów i całek

x-tyle kupiono długopisów y- tyle kupiono ołówków 3∙x – tyle wydano na długopisy 2∙y – tyle wydano na ołówki Tworzymy układ równań:. { 3 x +2 y=24

Niech F oznacza liczbę losowań, w których wyciągnięto monetę fałszywą, K-liczbę

Sprawdź, czy arkusz zawiera 14 ponumerowanych stron. Ewentualny brak zgłoś przewodniczącemu zespołu nadzorującego badanie. W rozwiązaniach zadań przedstaw tok rozumowania

[r]

Metoda rozwiązywania równania różniczkowego cząstkowego po- legająca na sprowadzeniu równania do postaci kanonicznej a następnie na rozwiązaniu równania w sposób

[r]