TEORETYCZNE PODSTAWY INFORMATYKI

Podobne dokumenty
Strategia "dziel i zwyciężaj"

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy w teorii liczb

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Programowanie w VB Proste algorytmy sortowania

TEORETYCZNE PODSTAWY INFORMATYKI

Temat: Algorytmy zachłanne

Wykład 3. Metoda dziel i zwyciężaj

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Jeszcze o algorytmach

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Algorytmy i struktury danych.

Zaawansowane algorytmy i struktury danych

Sortowanie przez scalanie

Matematyczne Podstawy Informatyki

Teoretyczne podstawy informatyki

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i struktury danych. Wykład 4

Programowanie dynamiczne i algorytmy zachłanne

Algorytm selekcji Hoare a. Łukasz Miemus

TEORETYCZNE PODSTAWY INFORMATYKI

Informatyka 1. Złożoność obliczeniowa

Szczegółowy program kursów szkoły programowania Halpress

Algorytmy i struktury danych

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Zadanie 1. Potęgi (14 pkt)

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Złożoność obliczeniowa zadania, zestaw 2

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Wstęp do programowania

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

TEORETYCZNE PODSTAWY INFORMATYKI

Luty 2001 Algorytmy (4) 2000/2001

Zaawansowane algorytmy i struktury danych

Programowanie dynamiczne

PROBLEM: SORTOWANIE PRZEZ ODWRÓCENIA METODA: ALGORYTMY ZACHŁANNE

EGZAMIN MATURALNY Z INFORMATYKI WYBRANE: ... (system operacyjny) ... (program użytkowy) ... (środowisko programistyczne)

Programowanie dynamiczne cz. 2

WYMAGANIA EGZAMINACYJNE Egzamin maturalny z INFORMATYKI

zajęcia 3. Marcin Andrychowicz, Tomasz Kulczyński,

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

WHILE (wyrażenie) instrukcja;

Efektywna metoda sortowania sortowanie przez scalanie

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Rekurencja. Przykład. Rozważmy ciąg

Algorytmika i pseudoprogramowanie

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

KARTA MODUŁU KSZTAŁCENIA

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Algorytmy i Struktury Danych.

Zadania do samodzielnego rozwiązania

ALGORYTMY I STRUKTURY DANYCH

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Programowanie dynamiczne

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

WHILE (wyrażenie) instrukcja;

Podstawy Programowania. Złożoność obliczeniowa

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Teoria liczb. Magdalena Lemańska. Magdalena Lemańska,

ALGORYTMY I STRUKTURY DANYCH

Algorytm. a programowanie -

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

Algorytmy i Struktury Danych, 2. ćwiczenia

Wydział Matematyki I Informatyki ul. Słoneczna Olsztyn

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Podstawy Informatyki. Sprawność algorytmów

Analiza algorytmów zadania podstawowe

Przykładowe zadania z teorii liczb

Algorytmy i struktury danych Metody programowania Języki i paradygmaty programowania Nazwa jednostki prowadzącej przedmiot Instytut Matematyki

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

Algorytmy przeszukiwania

Wstęp do programowania

Treść wykładu. Pierścienie wielomianów. Dzielenie wielomianów i algorytm Euklidesa Pierścienie ilorazowe wielomianów

Zadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie P lub F, która odpowiedź jest prawdziwa, a która fałszywa.

Wstęp do programowania

Programowanie od pierwszoklasisty do maturzysty. Grażyna Koba

Wstęp do informatyki- wykład 1

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

5. Rekurencja. Przykłady

Transkrypt:

1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień

Wykład 2 2 Problemy algorytmiczne Klasy problemów algorytmicznych Liczby Fibonacciego Przeszukiwanie tablic Największy wspólny podzielnik Algorytmy zachłanne Materiał w oparciu o wykład: D. Kane, Univ. San Diego, USA Data Structures and Algorithms, Algorithmic Toolbox

Klasy problemów typy algorytmów 3 Mogą być prosto zaimplementowane w dowolnym języku programowania Proste (naturalne) rozwiązanie jest efektywne.

Prosty problem: liniowy scan 4 Znajdź słowo w tekście. Przeszukujemy tekst liniowo Prosty algorytm działa dobrze Nie można/ nie ma powodu aby go poprawiać.

Algorytmiczny problem: 5 Znajdź najkrótszą drogę pomiędzy dwoma punktami.

Algorytmiczny problem: 6 Znajdź najlepsze przyporządkowanie studentów do pokoi w akademiku.

Algorytmiczny problem: 7 Zdefiniuj miarę podobieństwa dwóch dokumentów.

Algorytmiczny problem: 8 Nie jest oczywiste jak rozwiązać. Proste pomysły są zbyt wolne. Można optymalizować rozwiązanie.

Problemy ze sztucznej inteligencji 9 Rozumienie wypowiadanych słów Rozpoznawanie obrazów Gra w gry planszowe lub inne Itd

Liczby Fibonacciego 10 Definicja

Liczby Fibonacciego 11 Przykład: studiowanie populacji królików

Liczby Fibonacciego 12 Bardzo szybko rosną Dowód indukcyjny

Liczby Fibonacciego 13 Przykład

Naiwny algorytm: rekurencyjny 14 Funkcja rekurencyjna (pseudokod) Czas wykonania: T(n) oznacza liczbę linii kodu które są wykonywane dla danej wartości n.

Naiwny algorytm: rekurencyjny 15

Naiwny algorytm: rekurencyjny 16

Naiwny algorytm: rekurencyjny 17 Czas wykonania algorytmu: złożoność obliczeniowa

Naiwny algorytm: rekurencyjny 18 Dlaczego tak czasochłonny?

Naiwny algorytm: rekurencyjny 19 Dlaczego tak czasochłonny?

Efektywny algorytm: iteracja 20 Spróbujmy ręcznie policzyć Definicja

Efektywny algorytm: iteracja 21 Funkcja: iteracyjne wypełnianie tablicy (pseudokod)

Liczby Fibonaciego 22 Naiwny algorytm ( z definicji ): prosty, elegancki, nieakceptowalnie wolny Iteracyjny algorytm: bardzo szybki Zastosowanie ulepszonego (iteracyjnego) algorytmu umożliwia wykonanie obliczeń.

Przeszukiwanie: obrazu, tablicy 23

Metoda: dziel i zwyciężaj 24 Podziel na problemy tego same typu, obszary nie mogą się pokrywać.

Metoda: dziel i zwyciężaj 25 Podziel na problemy tego same typu, obszary nie mogą się pokrywać. Nie są tego samego typu Nie są rozłączne

Metoda: dziel i zwyciężaj 26 Dziel na mniejsze problemy:

Metoda: dziel i zwyciężaj 27 Zwyciężaj: rozwiąż mniejsze problemy:

Metoda: dziel i zwyciężaj 28 Połącz z powrotem:

Przykład: liniowe przeszukiwanie tablicy 29 Tłumaczenie słów: w danym wierszu słowa mają to samo znaczenie.

Przykład: liniowe przeszukiwanie tablicy 30 Rozwiązanie rekurencyjne

Przykład: liniowe przeszukiwanie tablicy 31 Rozwiązanie rekurencyjne Ilość operacji

Przykład: liniowe przeszukiwanie tablicy 32 Rozwiązanie iteracyjne

Przykład: posortowana tablica 33 Przeszukiwanie posortowanej tablicy: ilość operacji

Przykład: przeszukiwanie binarne 34 Przeszukiwanie binarne posortowanej tablicy:

Przykład: przeszukiwanie binarne 35 Przeszukiwanie binarne: szukamy liczby 50

Przykład: przeszukiwanie binarne 36 Przeszukiwanie binarne: szukamy liczby 50

Przykład: przeszukiwanie binarne 37 Przeszukiwanie binarne: szukamy liczby 50

Metoda: dziel i zwyciężaj 38 Dzielimy rekurencyjnie na rozłączne (dla danego etapu podziału) mniejsze problemy tego samego typu. Rozwiązujemy mniejsze problemy Scalamy rozwiązania

Metoda: dziel i zwyciężaj 39 Wersja rekurencyjna: przeszukiwanie binarne

Metoda: dziel i zwyciężaj 40 Wersja rekurencyjna: złożoność obliczeniowa Ilość operacji

Metoda: dziel i zwyciężaj 41 Wersja iteracyjna: przeszukiwanie binarne

Metoda: dziel i zwyciężaj 42 Tłumaczenie słów: w każdej kolumnie posortowane wg. kolejności liter słowa w danym języku. W danym wierszu słowa nie maja tego samego znaczenia.

Metoda: dziel i zwyciężaj 43 Tłumaczenie słów: w każdej kolumnie posortowane wg. kolejności liter słowa w danym języku. W danym wierszu słowa nie maja tego samego znaczenia. Zorganizuj jako przeszukiwanie binarne: pomocnicze tabele.

Największy wspólny podzielnik (NWP) 44 Definicja Dla pary liczb całkowitych a,b, ich największy wspólny podzielnik d = NWP(a,b) to największa liczba całkowita d taka ze dzieli bez reszty a, b. Teoria liczb Funkcje specjalne Kryptografia

Największy wspólny podzielnik (NWP) 45 Definicja Dla pary liczb całkowitych a,b, ich największy wspólny podzielnik d = NWP(a,b) to największa liczba całkowita d taka ze dzieli bez reszty a, b. gcd greatest common divisor

Naiwny algorytm znajdowania NWP 46 Ilość operacji w przybliżeniu równa a+b Bardzo wolny już dla liczb 20-to cyfrowych

Algorytm Euklidesa 47 Lemat: Jeżeli a = reszta z dzielenia a/b to gcd(a,b)=gcd(a,b) = gcd(b,a ) Dowod (szkic) a = a + b*q d dzieli a i b wtedy i tylko wtedy jeżeli d dzieli a i b.

Algorytm Euklidesa 48 Funkcja rekurencyjna, wprost zastosowanie lematu.

Algorytm Euklidesa 49 Przykład Ilość operacji: każdy krok redukuje liczby o czynnik 2. Ilość kroków to log(a*b). Jeżeli liczba 100-cyfrowa, potrzebne około 600 kroków. Każdy krok to pojedyncze dzielenie.

Efektywny algorytm 50 Naiwny algorytm jest zbyt wolny. Algorytm Euklidesa dużo efektywniejszy. Wymyślenie efektywnego algorytmu wymagało wiedzy na temat problemu, w tym przypadku z dziedziny teorii liczb..

Algorytm zachłanny 51 Jaka jest największa liczba która możesz zbudować maja do dyspozycji podane cyfry.????

Algorytm zachłanny 52 Jaka jest największa liczba która możesz zbudować używając wszystkie podane cyfry. Poprawna odpowiedz

Strategia zachłanna: największa liczba 53 Znajdź największą cyfrę Dołącz do liczby Usuń cyfrę z listy cyfr Powtarzaj dopóki lista cyfr nie jest pusta

Strategia zachłanna: tankowanie benzyny 54 Pełny bak benzyny wystarcz na przejechanie 400km. Na których stancjach tankować paliwo aby ilość tankowan potrzebna do przejechania 950 km była minimalna. Tylko dwa tankowania

Wybór strategii 55 Jakie są możliwości Zatankuj na każdej stacji po drodze Zatankuj na najdalszej stacji do której możesz dojechać Jedz aż do pustego baku. Strategia zachłanna 1) Wystartuj w punkcie A 2) Dojedz do najdalszej możliwie stacji benzynowej 3) Zatankuj i potraktuj ten punkt jako nowy punkt A Powtarzaj (1-3) dopóki nie zajdzie A=B

Podproblem 56 Podproblem jest taki sam jak oryginalny problem.

57 Algorytm zachłanny: liniowa zależność od ilości stacji benzynowych.

Jak podzielić na grupy 58 Chcemy podzielić na grupy gdzie wiek dziecka nie różni się więcej niż o 1 rok i tak aby było jak najmniej grup.

Jak efektywnie podzielić na grupy 59 Naiwny algorytm Ilość operacji: co najmniej 2 n dla n elementów które należy pogrupować.

Jak efektywnie podzielić na grupy 60 Naiwny algorytm Rozważmy podział na 2 grupy: C = G1 + G2 Każdy element i może być zaakceptowany do grupy G1 albo odrzucony i wtedy jest w grupie G2. W ten sposób można utworzyć 2 n różnych grup G1 Ilość operacji co najmniej 2 n

Jak efektywnie podzielić na grupy 61 Posortujmy najpierw elementy (punkty): n log(n) Zdefiniujmy problem jako poszukiwanie najmniejszej ilości odcinków które pokryją wszystkie punkty. Długość odcinka nie większa niż 1 jednostka. Jak to zrobić: zacznij od najbardziej lewego punktu i wyznacz odcinek o długości co najwyżej 1. Punkty leżące na odcinku tworzą jedna grupę.

Jak efektywnie podzielić na grupy 62 Posortujmy najpierw elementy (punkty): n log(n) Zdefiniujmy problem jako poszukiwanie najmniejszej ilości odcinków które pokryją wszystkie punkty. Długość odcinka nie większa niż 1 jednostka.

Jak efektywnie podzielić na grupy 63 Sortowanie: Ilość operacji proporcjonalna do n log(n) Ilość operacji proporcjonalna do n

Jak efektywnie podzielić na grupy 64 Naiwny algorytm: ilość operacji ~ 2 n Bardzo wolny już dla n=50 Sortowanie + algorytm zachłanny Sortowanie ~ n log() Algorytm zachłanny ~ n Całość efektywna nawet dla n=10 000 000

Algorytm zachłanny: pakowanie plecaka 65 Jak najlepiej zapakować plecak

Algorytm zachłanny: pakowanie plecaka 66 Jak najlepiej zapakować plecak

Algorytm zachłanny: pakowanie plecaka 67 Jak najlepiej zapakować plecak

Algorytm zachłanny: pakowanie plecaka 68 Jak najlepiej zapakować plecak

Algorytm zachłanny: pakowanie plecaka 69 Jak najlepiej zapakować plecak

Algorytm zachłanny: pakowanie plecaka 70 Jak najlepiej zapakować plecak

Algorytm zachłanny: pakowanie plecaka 71 Jak najlepiej zapakować plecak 1) Dopóki plecak nie jest pełny, wybierz grupę i o największym vi/wi. 2) Jeżeli przedmioty mieszczą się w plecaku umieść wszystkie. Jeżeli nie ta tyle aby zapełnić plecak. 3) Jeżeli jeszcze jest miejsce w plecaku, wybierz nowe i na kolejne o największym vi/wi. Powtarzaj (1)-(3) do momentu zapełnienia plecaka lub aż nie będzie więcej przedmiotów które się w nim mieszczą.

Algorytm zachłanny: pakowanie plecaka 72

Algorytm zachłanny: pakowanie plecaka 73 Czy można efektywniej? Ilość operacji które były wykonywane: n 2 Wybieranie kolejnego i maksymalnie n-razy Wkładanie przedmiotów maksymalnie n-razy Gdybyśmy najpierw posortowali wg. malejącego vi/wi to ilość operacji bylaby: n log(n) + n + n Sortowanie: n log(n) operacji Wybranie kolejnego i 1operacja Wkładanie do plecaka n operacji

Algorytm zachłanny: pakowanie plecaka 74 Posortowaliśmy: