Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Podobne dokumenty
Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Podstawy Informatyki. Inżynieria Ciepła, I rok. Iteracja warunkowadopóki(while) Blok instrukcji. Pascal: begin instrukcja1; C: { end;

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Podstawy Informatyki

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Analiza algorytmów zadania podstawowe

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

Jeszcze o algorytmach

Struktury Danych i Złożoność Obliczeniowa

Podstawy Informatyki. Sprawność algorytmów

Matematyka dyskretna. Andrzej Łachwa, UJ, a/15

Informatyka A. Algorytmy

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

Laboratorium nr 1. i 2.

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

1.1. Uzupełnij poniższą tabelę: i wynik(i)

Laboratorium nr 7 Sortowanie

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

ZADANIE 1. Ważenie (14 pkt)

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 )

Analiza algorytmów zadania podstawowe

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych.

Strategia "dziel i zwyciężaj"

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Zaawansowane algorytmy i struktury danych

Internetowe Ko³o M a t e m a t yc z n e

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

TEORETYCZNE PODSTAWY INFORMATYKI

Programowanie w VB Proste algorytmy sortowania

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Metody numeryczne w przykładach

Złożoność algorytmów. Wstęp do Informatyki

Indukcja matematyczna

Algorytmy i struktury danych. Wykład 4

Programowanie strukturalne i obiektowe. Funkcje

WYRAŻENIA ALGEBRAICZNE

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Rekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili

Dydaktyka matematyki, IV etap edukacyjny (ćwiczenia) Ćwiczenia nr 7 Semestr zimowy 2018/2019

Zaawansowane algorytmy i struktury danych

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.

Rekurencja. Przygotowała: Agnieszka Reiter

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

O rekurencji i nie tylko

Luty 2001 Algorytmy (4) 2000/2001

Sortowanie przez scalanie

Wstęp do programowania

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

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Wstęp do programowania

Przeglad podstawowych pojęć (3) Podstawy informatyki (3) dr inż. Sebastian Pluta. Instytut Informatyki Teoretycznej i Stosowanej

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

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

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. Czwartek 28 marca zaczynamy od omówienia zadań z kolokwium nr 1.

9. Podstawowe narzędzia matematyczne analiz przestrzennych

Algorytmy sortujące i wyszukujące

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:

Efektywna metoda sortowania sortowanie przez scalanie

4. Funkcje. Przykłady

INFORMATYKA SORTOWANIE DANYCH.

EGZAMIN MATURALNY 2012 INFORMATYKA

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

Algorytmy i Struktury Danych.

Algorytmy. wer Wojciech Myszka 30 listopada 2008

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

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

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Sortowanie. LABORKA Piotr Ciskowski

Programowanie - instrukcje sterujące

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Zadania do samodzielnego rozwiązania

Jarosław Wróblewski Matematyka Elementarna, zima 2012/13

5. Rozwiązywanie układów równań liniowych

1 + x 1 x 1 + x + 1 x. dla x 0.. Korzystając z otrzymanego wykresu wyznaczyć funkcję g(m) wyrażającą liczbę pierwiastków równania.

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Co to jest algorytm? przepis prowadzący do rozwiązania zadania, problemu,

do instrukcja while (wyrażenie);

Jarosław Wróblewski Analiza Matematyczna 1A, zima 2012/13

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

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

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

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

Algorytm selekcji Hoare a. Łukasz Miemus

Wykład 2. Poprawność algorytmów

Matematyka dyskretna. Andrzej Łachwa, UJ, /10

Gimnazjum w Tęgoborzy - Algorytmika Strona 1 z 22 mgr Zofia Czech

Transkrypt:

Podstawy Informatyki Metalurgia, I rok Rekurencja z łacińskiego oznacza to przybiec z powrotem - osiągniesz rzecz wielką, jeśli zawrócisz po to, by osiągnąć rzeczy małe Małe dziecko otrzymuje polecenie posprzątania rozrzuconych klocków do pudełka zebrać wszystkie klocki naraz???? - Wykład Rekurencja skomplikowane zadanie wziąć jeden klocek, przełożyć go do pudełka, a następnie zrobić to samo z pozostałymi klockami??? - prosta czynność Duży problem został rozłożony na problem elementarny, który umiemy rozwiązać Problem elementarny jest mniej skomplikowany niż problem początkowy Zakończenie algorytmu jest jasno określone ( w momencie gdy na podłodze nie ma rozrzuconych klocków )

Mamy obliczyć: a n Matematycznie: Wiemy że: a n =a x a n-1 (a n-1 jest łatwiej obliczyć niż a n ) Jeśli jest nadal trudno, to zawsze można wstawić: a n-1 =a x a n-, gdzie: a n- =a x a n- itd wystarczy wiedzieć tylko, że: a 0 =1 aby obliczyć dowolną potęgę a Def: Program rekurencyjny jest to program, który wywołuje sam siebie Problem: Dysponujemy tablicą n liczb całkowitych A(n) o elementach: a(1),a(), a(),, a(n) Zadanie: sprawdzić, czy w tablicy A występuje liczba x Rozwiązanie: wziąć pierwszy niezbadany element tablicy n elementowej, jeśli aktualnie analizowany element tablicy jest równy x to: wypisz sukces i zakończ działanie w przeciwnym wypadku: zbadaj pozostałą część tablicy n-1 elementów W programach rekurencyjnych: zakończenie programu jest jasno określone (znaleziony element, przekroczony zakres tablicy), duży problem zostaje rozłożony na problemy elementarne, które umiemy rozwiązać Podstawowe błędy: złe określenie warunku zakończenia programu, niewłaściwa (nieefektywna) dekompozycja problemu Algorytmy sortowania danych Najprostsze sortowanie: zamiana dwóch elementów Sortowanie przez selekcję Opis: trzeba wyznaczyć najmniejszy element w ciągu; zamienić go miejscami z pierwszym elementem ciągu, wyznaczyć najmniejszy element w a[n] i zamienić go z drugim elementem w ciągu, itd Sortowanie przez selekcję - algorytm dla i := 1 do n-1 wykonuj min := i; dla j := i+1 do n wykonuj jeśli a[ j ] < a[ min ] to min := j; a[ min ] <-> a[ j ] {zamiana miejscami a[ min ] z a[ j ]} Sortowanie przez wstawianie (układanie kart do brydża) Opis: metoda polega na wstawianiu następnej karty we właściwe miejsce uporządkowanych uprzednio kart 9 8 9 8 8 9 8 9 8 9 8 9

Sortowanie przez wstawianie - algorytm dla i=,,liczba elementów tablicy wykonuj { j :=i podczas gdy j > 1 i x[ j-1 ] > x[ j ] wykonuj { pom := x[ j ] x[ j ] := x[ j-1] x[ j-1] := pom j := j-1 } } Sortowanie bąbelkowe 0 1 40 40 40 9 4 4 4 4 6 4 9 9 9 9 18 4 6 6 6 6 6 4 4 18 18 18 18 18 18 0 0 0 0 0 0 0 0 0 Tablica jest przeszukiwana od dołu Element zacieniony jest tym, który w pojedynczym przebiegu uleciał do góry jako najlżejszy Analizowane są zawsze sąsiadujące ze sobą elementy Jeśli nie są uporządkowane (u góry jest element cięższy ) to następuje ich zamiana Wynik sortowania bąbelkowego Algorytm sortowania bąbelkowego 0 1 4 6 40 40 4 4 4 4 4 9 4 40 6 6 6 6 6 9 6 40 18 18 18 18 6 9 18 40 0 0 4 18 18 9 0 40 9 0 0 0 0 0 9 40 TAB : Tablica [1n] elementów typu rzeczywistego i,j : całkowite pom: rzeczywiste Początek {programu} Dla i:=1 do n-1 wykonuj dla j:=n do i+1 z krokiem -1wykonuj Jeśli TAB[j]<TAB[j-1] to pom:=tab[j-1]; TAB[j-1]:=TAB[j]; TAB[j]:=pom Koniec {programu} Dość często zdarzają się puste przebiegi (nie jest dokonywana żadna wymiana, bowiem elementy są już posortowane Wieża Hanoi Algorytm jest bardzo wrażliwy na konfigurację początkową danych Wersja 1: 4 6 18 0 9 40 Wersja : 4 6 18 0 9 40 (wersja 1 wymaga jednej zamiany, a wersja wymaga aż sześciu przebiegów) Chcemy przenieść krążki z A na B, wykorzystując kołek C Przenosimy po 1 krążku Większy krążek nigdy nie może być umieszczony na mniejszym krążku

A -> B; A -> C; B -> C; A -> B; C -> A; C -> B; A -> B; 1 A -> B; 8 A -> C; A -> C; 9 B -> C; B -> C; 10 B -> A; 4 A -> B; C -> A; C -> A; 1 B -> C; 6 C -> B; 1 A -> B; A -> B; 14 A -> C; 1 B -> C; Wieża Hanoi - algorytm Legenda Tybetu: po przeniesieniu 64 krążków nastąpi świata Liczba pojedynczych przeniesień: minimum N - 1 ( - 1 = 8-1 = dla krążków) Dla 64 to jest 64-1 tj 1844644009161 Jeżeli przeniesienie 1 krążka wymaga sekund, to na przeniesienie 64 krążków potrzeba 1 biliona lat (4, miliarda lat temu powstała ziemia) Przy szybkości przenoszenia 1 miliona krążków na sekundę, całkowity czas przeniesienia 64 krążków wynosi minimum pół miliona lat Podprogram przenieś N z X na Y używając Z; jeżeli N=1, to wypisz X -> Y ; w przeciwnym razie (tj jeżeli N>1) wykonaj, co następuje: wywołaj przenieś N-1 z X na Z używając Y; wypisz X->Y ; wywołaj przenieś N-1 z Z na Y używając X; wróć Na stronie: http://wiposplodzpl/zylla/games/hanoiphtml jest aplikacja do gry w wieże Hanoi Jak wykonują się programy rekurencyjne? Zadanie: Obliczyć n! 0! = 1 N! = N*(n-1)! Dla n>=1 Jak to wygląda w praktyce dla n = (! =?) n = 0? nie *! n = 0? nie *1! Nie rekurencyjne, ale ciekawe algorytmy n = 0? nie 1*0! n = 0? tak 1 -pionowe strzałki oznaczają zagłębianie się programu z poziomu n na n-1, itd, aż do przypadku elementarnego 0!, - pozioma strzałka oznacza obliczanie wyników cząstkowych, - ukośna strzałka prezentuje przekazywanie wyniku cząstkowego z poziomu niższego na wyższy)

Algorytm sprawdzania czy trójkąt jest prostokątny WY: trójkąt nie jest prostokątny We: a,b,c boki trójkąta N d = a*a + b*b? d=c*c T WY: trójkąt jest prostokątny Algorytm sprawdzania czy trójkąt jest prostokątny Program trojkat prostokatny; { Deklaracja zmiennych } Początek a,b,c,d: całkowita; pisz( podaj boki a,b,c); d:=a*a+b*b; jeżeli (d=c*c) to pisz ( trójkąt prostokątny ) w przeciwnym razie pisz ( trójkąt nie Gdzie tkwi błąd? jest prostokątny ) Jak poprawić ten program? Algorytm sprawdzania parzystości liczby Algorytm sprawdzania parzystości liczby WY: x nieparzyste We: sprawdzana liczba x N y = (x/)*? x=y T WY: x parzyste Program parzystosc; { Deklaracja zmiennych } x,y: całkowita; Początek pisz( podaj liczbe x ); czytaj(x); y := x/; y := y*; jeżeli (x=y) to pisz ( liczba x jest parzysta ) w przeciwnym razie pisz ( liczba x jest nieparzysta ) Uwaga: Program ma sens tylko dzięki własności dzielenia liczb całkowitych Sito Erastotenesa Sito Erastotenesa Wyszukiwanie liczb pierwszych 1 14 1 16 4 18 6 0 8 1 9 10 4 1 1 6 1 1 9 1 14 1 16 4 18 6 0 8 1 9 10 4 1 1 6 1 Kiedy? Dla n

program sito a: tablica [000] elementów całkowitych i,j,n,m,x,y:całkowite pisz 'podaj górną granicę przedziału, max 1000' czytaj n m=int(sqrt(n)) {maksymalny mnoznik pierwiastek z n) dla i=1 do n wykonuj a[i]=i {podstawienie kolejnych liczb do tablicy} dla j= do m wykonuj jeśli a[j] <>0 to dla i=j+1 do n wykonuj x=a[i] y=(x/j)*j {sprawdzanie podzielności} jeśli x=y to a[i]=0 pisz 'w podanym zakresie liczby pierwsze to:' dla i= do n jeśli a[i] <>0 to drukuj a[i] Optymalizacja algorytmów Zawsze poszukujemy najlepszego algorytmu ze względu na czas i złożoność obliczeń Wydajność czasowa algorytmu: - funkcja O(n), określająca ile czasu potrzebuje dany algorytm na rozwiązanie problemu o rozmiarze n (parametr n zależy od analizowanego zagadnienia, np dla sortowania tablicy, n jest liczbą danych do sortowania, itp) Program zliczający sumę elementów tablicy A[n]: Suma :=0 dla i:=0 do i:=n suma := suma + A[i] Złożoność obliczeniowa, cd Program obliczający sumę elementów tablicy dwuwymiarowej A[n,n]: Suma :=0 // 1 dla i:=0 do i:=n //1 dla j:=0 do j:=n //n suma := suma + A[i,j] //n^ Jedna instrukcja wymaga jednej jednostki czasu Złożoność obliczeniowa O(n) = n^ + n + Przyjmujemy, że złożoność obliczeniowa O(n) = n^ + n Jedna instrukcja wymaga jednej jednostki czasu Złożoność obliczeniowa O(n) = n+ Ponieważ najbardziej znaczącym składnikiem jest n, więc, O(n) = n Czas pracy algorytmów różnych klas c(n) c(n) 10 0 0 40 N 10 0 0 40 N 100 400 900 1600 n 104 10486 104184 109966 N! 68800 *10 18 6*10 *10 Czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych, ale również od ich wartości lub układu (rozmieszczenia) Skrócenie czasu obliczeń Wielokrotne mnożenie zamiast potęgowania y=x y=x*x*x*x*x jest szybsze i dokładniejsze niż: y=x^ gdyż funkcja potęgowania jest rozwijana jako: y=e *ln(x) a dodatkowo, funkcje ln i e x są obliczane jako sumy określonych ciągów Ze zrozumiałych przyczyn zaniedbuje się dalsze wyrazy ciągu, co zmniejsza dokładność Tak więc często otrzymujemy wyniki: ^=69999999999999 itp

Obliczenia numeryczne Obliczanie pierwiastka kwadratowego - algorytm: Obliczanie pierwiastka kwadratowego: Jak obliczyć pierwiastek z x? Metoda Newtona: y+ y= yx x- liczba pierwiastkowana y - wynik pierwiastkowania Program pierwiastek kwadratowy; { Deklaracja zmiennych } x,y: i : Początek rzeczywista; całkowita; pisz( podaj x); y := 1; dla i:=0 do i:= 0 y:=(y+x/y)/; pisz ( pierwiastek z, x, =, y)