DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL

Slides:



Advertisements
Podobne prezentacje
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Advertisements

Ekonometria WYKŁAD 10 Piotr Ciżkowicz Katedra Międzynarodowych Studiów Porównawczych.
1 Dr Galina Cariowa. 2 Legenda Iteracyjne układy kombinacyjne Sumatory binarne Sumatory - substraktory binarne Funkcje i układy arytmetyczne Układy mnożące.
© Kazimierz Duzinkiewicz, dr hab. inż. Katedra Inżynierii Systemów Sterowania 1 Metody optymalizacji - Energetyka 2015/2016 Metody programowania liniowego.
Excel 2007 dla średniozaawansowanych zajęcia z dnia
ZASTOSOWANIE FUNKCJI WYKŁADNICZEJ I LOGARYTMICZNEJ DO OPISU RUCHU DRGAJĄCEGO Agnieszka Wlocka Agnieszka Szota.
Zmienne losowe Zmienne losowe oznacza się dużymi literami alfabetu łacińskiego, na przykład X, Y, Z. Natomiast wartości jakie one przyjmują odpowiednio.
Karolina Supera Michał Krajewski. Struktura w formie drzewa Funktor jest węzłem Składniki struktur są gałęziami W strukturze możemy zagnieżdżać inne struktury.
Analiza tendencji centralnej „Człowiek – najlepsza inwestycja”
Równowaga rynkowa w doskonałej konkurencji w krótkim okresie czasu Równowaga rynkowa to jest stan, kiedy przy danej cenie podaż jest równa popytowi. p.
W KRAINIE TRAPEZÓW. W "Szkole Myślenia" stawiamy na umiejętność rozumowania, zadawania pytań badawczych, rozwiązywania problemów oraz wykorzystania wiedzy.
Algorytmy Informatyka Zakres rozszerzony
Lekcja 17 Budowanie wyrażeń algebraicznych Opracowała Joanna Szymańska Konsultacje Bożena Hołownia.
KOMBINATORYKA.
Metody Analizy Danych Doświadczalnych Wykład 9 ”Estymacja parametryczna”
Menu Jednomiany Wyrażenia algebraiczne -definicja Mnożenie i dzielenie sum algebraicznych przez jednomian Mnożenie sum algebraicznych Wzory skróconego.
POLITECHNIKA RZESZOWSKA im. Ignacego Łukasiewicza WYDZIAŁ ELEKTROTECHNIKI I INFORMATYKI ZAKŁAD METROLOGII I SYSTEMÓW POMIAROWYCH METROLOGIA Andrzej Rylski.
I T P W ZPT 1 Realizacje funkcji boolowskich Omawiane do tej pory metody minimalizacji funkcji boolowskich związane są z reprezentacją funkcji w postaci.
Optymalna wielkość produkcji przedsiębiorstwa działającego w doskonałej konkurencji (analiza krótkookresowa) Przypomnijmy założenia modelu doskonałej.
Papierosy to zła rzecz, z nim zdrowie idzie precz!!! Autor: Weronika Pączek.
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
Renata Maciaszczyk Kamila Kutarba. Teoria gier a ekonomia: problem duopolu  Dupol- stan w którym dwaj producenci kontrolują łącznie cały rynek jakiegoś.
 Przedziałem otwartym ( a;b ) nazywamy zbiór liczb rzeczywistych x spełniających układ nierówności x a, co krócej zapisujemy a
Przykład 1: Określ liczbę pierwiastków równania (m-1)x 2 -2mx+m=0 w zależności od wartości parametru m. Aby określić liczbę pierwiastków równania, postępujemy.
Zadanie 4. Treść zadania Oto początkowy fragment pewnego nieskończonego ciągu liczbowego: Jego kolejne wyrazy powstają zgodnie z.
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
Test analizy wariancji dla wielu średnich – klasyfikacja pojedyncza
Rekurencja - Haskell Bartosz Pawlak Sebastian Żółtowski Adam Stegenda Krystian Sobótka Tomasz Gołębiewski.
Rozdział 5 REKURENCJA.
POD - żółw przesuwa się po ekranie nie zostawiając za sobą śladu;
Minimalizacja automatu
Schematy blokowe.
terminologia, skale pomiarowe, przykłady
On-the-Fly Garbage Collection
ORGANIZACJA.
MATEMATYCZNE MODELOWANIE PROCESÓW BIOTECHNOLOGICZNYCH
JAK OBLICZYĆ DATĘ WIELKANOCY?
Liczby pierwsze.
Przybliżenia dziesiętne liczb rzeczywistych
Rekursje Tak jak w innych językach funkcje mogą odwoływać się same do siebie Możemy regulować głębokość przed stwierdzeniem błędu (MaxRecursion, $RecursionLimit,
ALGORYTMY I STRUKTURY DANYCH
Akademia C# lab. 9 Zdarzenia i delegaty.
Podstawy automatyki I Wykład /2016
Programowanie obiektowe
Wstęp do Informatyki - Wykład 3
Kurs języka C++ – wykład 13 ( )
Elementy fizyki kwantowej i budowy materii
Języki programowania.
Egzamin ucznia klasy ósmej
Instrukcje wyboru.
Podstawy informatyki Zygfryd Głowacz.
Dobrobyt.
ALGORYTMY I STRUKTURY DANYCH
Pisemne dzielenie liczb naturalnych
To naprawdę bardzo proste!
Proste obliczenia w arkuszu kalkulacyjnym
Rekurencja Ponieważ w Haskellu nie mamy klasycznych pętli for czy while dlatego w wielu algorytmach musimy używać rekurencji.
ETO w Inżynierii Chemicznej
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Doskonalenie rachunku pamięciowego u uczniów
MATEMATYKA Opracowała: Martyna Białas
Elementy Kombinatoryki
Program na dziś Wprowadzenie Logika prezentacji i artykułu
Anoreksja – choroba czy fanaberia?
To naprawdę bardzo proste!
Zapis prezentacji:

DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL Rekursja DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL

Rekursja (Rekurencja) Rekurencja jest to termin który występuje zarówno w matematyce jak i w informatyce. Rekursja oznacza iż w funkcja wywołuje samą siebie w celu rozwiązania pewnego problemu. Zazwyczaj zadania rozwiązywane techniką rekurencyjną są wolniejsze niż ich iteracyjne odpowiedniki, natomiast w niektórych przypadkach zapis rozwiązania rekurencyjnego jest dużo bardziej prosty i zrozumiały.

Rekurencja w matematyce Przykład matematyczny wykorzystania rekurencji to obliczanie kolejnych wyrazów Ciągu Fibonacci’ego: Dla przykładu, obliczenie fib(4) wygląda następująco:

Rekurencja w Haskell Rekurencja jest niejako wymuszona w języku Haskell z tego względu iż nie jest możliwa zmiana wartości zmiennych. Co za tym idzie niemożliwe jest użycie pętli – instrukcje takie nie istnieją w języku Haskell. Przykład rozwiązania problemu wyznaczania n-tego wyrazu Ciągu Fibonacci’ego:

Funkcja Maximum Zobaczmy jak wygląda implementacja funkcji MAXIMUM w języku Haskell:

Opis funkcji Pierwszy warunek sprawdza czy lista nie jest pusta, jeżeli tak jest zwraca błąd: „maximum of empty list”; Drugi warunek sprawdza czy podana lista jest jednoelementowa, jeżeli jest to zwraca właśnie ten element; Jeżeli poprzednie warunki nie zostały zrealizowane z podanej listy tworzone są dwie: head i tail. Używamy funkcji where w celu zdefiniowania zmiennej maxTail jako maksimum „ogona”, następnie sprawdzamy czy „głowa” jest większa od maxTail. Jeśli tak – zwracamy głowę jako wynik, jeśli nie zwracamy maximum reszty listy.

Przykład użycia funkcji maximum Przykładowa tablica: [2, 1, 5] Dzielimy tablicę na head: [2] i tail: [1, 5], następnie wywołujemy funkcję maximum dla tail. Tail: [1, 5] jest dzielony na head: [1] i tail: [5], co oznacza spełniony jeden z warunków końca rekurencji. Porównujemy 1 i 5, zwrócone zostaje 5. Wracamy „na wierzch” rekurencji i porównujemy 5 i 2. Zwrócone zostaje 5 jako największa wartość tablicy.

Funkcja replicate Kolejna rekurencyjna funkcja której zadaniem jest powtórzenie drugiego argumentu tyle razy ile podane jest w argumencie pierwszym. Przykładowe wywołanie funkcji: replicate 4 6, wynikiem będzie lista składająca się z czterech szóstek: [6, 6, 6, 6]

Funkcja take Funkcja ta pobiera liczbę elementów (podaną jako pierwszy jej argument) tablicy (podaną jako drugi jej argument) i zwraca ją na ekran. W zależności od tego jakie wartości przyjmie funkcja take zwracane są odpowiednie wartości zapisane w 2, 4 lub 5 linii.

Funkcja reverse Funkcja przyjmuje listę elementów oraz zwraca tą listę w odwróconej kolejności.

Funkcja quicksort Dzięki tej funkcji możliwe jest posortowanie elementów wielu typów. Dzieli ona rekurencyjnie problem na mniejsze podproblemy co najlepiej prezentuje grafika z kolejnego slajdu. A oto kod:

Grafika ilustrująca działanie algorytmu

Podsumowanie W dotychczasowych przykładach zauważyć można pewną zależność która dotyczy rekurencyjnych algorytmów. W pierwszych liniach rozważamy przypadki końcowe i szczególne dla danych struktur czy typowych sytuacji. Np. dla list będzie to sytuacja kiedy lista będzie pusta lub gdy w drzewie pozostanie wierzchołek który nie ma dzieci. Dopiero w ostatniej linii zapisane jest wywołanie funkcji przez siebie samą.