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

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

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

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.

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 )

Laboratorium nr 7 Sortowanie

Struktury Danych i Złożoność Obliczeniowa

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

Strategia "dziel i zwyciężaj"

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

Analiza algorytmów zadania podstawowe

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

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

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

Sortowanie. LABORKA Piotr Ciskowski

Analiza algorytmów zadania podstawowe

Programowanie w VB Proste algorytmy sortowania

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

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

Wstęp do programowania

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

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

Raport z projektu. Przedmiot: Algorytmy i struktury danych 1 Projekt: Wieża Hanoi Autor: Wojciech Topolski

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

Algorytmy sortujące i wyszukujące

Algorytmy. wer Wojciech Myszka 30 listopada 2008

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Jeszcze o algorytmach

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

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

Rekurencja. Przygotowała: Agnieszka Reiter

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

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

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

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

ZADANIE 1. Ważenie (14 pkt)

Laboratorium nr 1. i 2.

Sortowanie. Bartman Jacek Algorytmy i struktury

Podstawy Informatyki. Sprawność algorytmów

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

O rekurencji i nie tylko

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

Sortowanie przez scalanie

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

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

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

Sortowanie Shella Shell Sort

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.

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

EGZAMIN MATURALNY 2012 INFORMATYKA

Wstęp do programowania

Metody algortmiczne (Algorytmy Część IV)

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

Sortowanie - wybrane algorytmy

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

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

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Informatyka A. Algorytmy

Wydział Matematyki I Informatyki ul. Słoneczna Olsztyn

2.7. Zakręt za zakrętem

Sortowanie przez wstawianie Insertion Sort

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

Algorytmy i Struktury Danych, 2. ćwiczenia

2.1. Duszek w labiryncie

Algorytmy przeszukiwania

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

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

INFORMATYKA SORTOWANIE DANYCH.

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

Poprawność algorytmów

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

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

Algorytmy i struktury danych

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

Wykład 2. Poprawność algorytmów

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Rekurencja (rekursja)

Algorytmy sortujące. Sortowanie bąbelkowe

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

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

Algorytmika w bioinformatyce

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

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

Algorytmika i pseudoprogramowanie

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

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Programowanie w środowisku Baltie

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

2.8. Algorytmy, schematy, programy

5. Rekurencja. Przykłady

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wybrane algorytmy tablicowe

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

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

Efektywna metoda sortowania sortowanie przez scalanie

ALGORYTMY I STRUKTURY DANYCH

Teoretyczne podstawy informatyki

Transkrypt:

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

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 Przykład: Małe dziecko otrzymuje polecenie posprzątania rozrzuconych klocków do pudełka. zebrać wszystkie klocki naraz???? - 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-2, gdzie: a n-2 =a x a n-3 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(2), a(3),..., 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[2..n] i zamienić go z drugim elementem w ciągu, itd.

Sortowanie przez selekcję - algorytm dla i := 1 do n-1 wykonuj początek 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 ]} koniec

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 3 5 7 9 8 3 5 7 8 9 3 5 7 3 8 9 5 7 3 5 8 9 7 3 5 7 8 9

Sortowanie przez wstawianie - algorytm dla i=2,...,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 2 2 2 2 40 40 39 4 4 4 4 6 4 39 39 39 39 18 4 6 6 6 6 6 4 4 18 18 18 18 18 18 20 20 20 20 20 20 20 20 20 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 2 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 0 1 2 3 4 5 6 40 2 2 2 2 2 2 2 40 4 4 4 4 4 39 4 40 6 6 6 6 6 39 6 40 18 18 18 18 6 39 18 40 20 20 4 18 18 39 20 40 39 20 20 20 20 30 39 40

Algorytm sortowania bąbelkowego TAB : Tablica [1..n] 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 początek pom:=tab[j-1]; TAB[j-1]:=TAB[j]; TAB[j]:=pom koniec Koniec {programu}.

Dość często zdarzają się puste przebiegi (nie jest dokonywana żadna wymiana, bowiem elementy są już posortowane. Algorytm jest bardzo wrażliwy na konfigurację początkową danych. Wersja 1: 4 2 6 18 20 39 40 Wersja 2: 4 6 18 20 39 40 2 (wersja 1 wymaga jednej zamiany, a wersja 2 wymaga aż sześciu przebiegów)

Wieża Hanoi A B C 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 C A -> B; A -> C; B -> C; A -> B; C -> A; C -> B; A -> B;

A B C 1. A -> B; 8. A -> C; 2. A -> C; 9. B -> C; 3. B -> C; 10. B -> A; 4. A -> B; 11. C -> A; 5. C -> A; 12. B -> C; 6. C -> B; 13. A -> B; 7. A -> B; 14. A -> C; 15. B -> C;

A B C Legenda Tybetu: po przeniesieniu 64 krążków nastąpi koniec świata. Liczba pojedynczych przeniesień: minimum 2 N - 1 (2 3-1 = 8-1 = 7 dla 3 krążków). Dla 64 to jest 2 64-1 tj 18446744073709551615 Jeżeli przeniesienie 1 krążka wymaga 2 sekund, to na przeniesienie 64 krążków potrzeba 1 biliona lat (4,5 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..

Wieża Hanoi - algorytm 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://wipos.p.lodz.pl/zylla/games/hanoi7p.html 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 = 3 (3! =?) n = 0? nie 3*2! n = 0? nie 2*1! 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)