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

Podobne dokumenty
Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Podstawowe pojęcia algorytmiki

Algorytmy w teorii liczb

Programowanie w Baltie klasa VII

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

Przykładowe zadania z teorii liczb

Algorytm. a programowanie -

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

Zadania do samodzielnego rozwiązania

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

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

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja;

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

Zaawansowane algorytmy i struktury danych

Algorytmy i struktury danych. Wykład 4

Algorytm i złożoność obliczeniowa algorytmu

LISTA 5. C++ PETLE for, while, do while

2.8. Algorytmy, schematy, programy

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

MADE IN CHINA czyli SYSTEM RESZTOWY

Luty 2001 Algorytmy (7) 2000/2001

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach

Podstawy programowania. Podstawy C# Przykłady algorytmów

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Kongruencje pierwsze kroki

VII Olimpiada Matematyczna Gimnazjalistów

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

17. Naprzemienne odejmowanie

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

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

TEORETYCZNE PODSTAWY INFORMATYKI

Wybrane zagadnienia teorii liczb

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

Zadanie 1. Potęgi (14 pkt)

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.

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

MATEMATYKA WYMAGANIA EDUKACYJNE DLA KLASY V

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

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

Indukcja matematyczna. Zasada minimum. Zastosowania.

Matematyka dyskretna

W. Guzicki Zadanie 41 z Informatora Maturalnego poziom podstawowy 1

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. W dniu 21 lutego 2013 r. omawiamy test kwalifikacyjny.

Laboratorium kryptograficzne dla licealistów 6

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

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN):

Matematyka z kluczem. Szkoła podstawowa nr 18 w Sosnowcu. Przedmiotowe zasady oceniania klasa 7

I) Reszta z dzielenia

1 Wprowadzenie do algorytmiki

Algorytmy i struktury danych

LISTA 1 ZADANIE 1 a) 41 x =5 podnosimy obustronnie do kwadratu i otrzymujemy: 41 x =5 x 5 x przechodzimy na system dziesiętny: 4x 1 1=25 4x =24

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

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

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

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

PROSTE RACHUNKI WYKONYWANE ZA POMOCĄ KOMPUTERA

Kongruencje i ich zastosowania

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1

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

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA)

ZADANIE 1. Ważenie (14 pkt)

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

Metody numeryczne w przykładach

W wielu obliczeniach w matematyce bądź fizyce wykonanie niektórych kroków zależy od spełnienia warunku.

EGZAMIN MATURALNY Z INFORMATYKI 13 MAJA 2019 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 90 minut

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Operacje arytmetyczne

Programowanie - instrukcje sterujące

PROGRAMOWANIE W C++ ZADANIA

Wokół Problemu Steinhausa z teorii liczb

2. DZIAŁANIA NA WIELOMIANACH

Dodawanie liczb binarnych

1. Wykład NWD, NWW i algorytm Euklidesa.

Jeszcze o algorytmach

Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 2 Teoria liczby rzeczywiste cz.2

Informatyka A. Algorytmy

5. Rekurencja. Przykłady

Przypomnienie wiadomości dla trzecioklasisty C z y p a m i ę t a s z?

Matematyka dyskretna

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,

Warunki logiczne instrukcja if

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

WYMAGANIA NA POSZCZEGÓLNE OCENY MATEMATYKA KL.VII

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

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.

ROZKŁAD MATERIAŁU DLA KLASY I LICEUM I TECHNIKUM (ZAKRES PODSTAWOWY I ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ

KRYTERIA WYMAGAŃ NA POSZCZEGÓLNE OCENY SZKOLNE. Przedmiot: matematyka. Klasa: 5

EGZAMIN MATURALNY Z INFORMATYKI

Odwrócimy macierz o wymiarach 4x4, znajdującą się po lewej stronie kreski:

Technologie informacyjne Wykład VII-IX

1. LICZBY DZIAŁ Z PODRĘCZNIKA L.P. NaCoBeZu kryteria sukcesu w języku ucznia

Metody numeryczne I Równania nieliniowe

Transkrypt:

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

Algorytmika Najważniejsza część informatyki Opisuje jak rozwiązywać problemy algorytmiczne, jakie struktury danych dobierać, jak analizować zachowanie się programów. Pozwala na osiągnięcie znacznie bardziej spektakularnych wyników, niż samo przyspieszanie działania sprzętu

Skąd się wzięło słowo algorytm? Musi to być stare słowo, bo w większości języków brzmi ono podobnie.

Al Chwarizmi Abu Ja'far Muhammad ibn Musa Al-Chuwarizmi (ok. 780 ok. 850) Hisab al-jabr w'al-muqabala Opisał ciekawe algorytmy, między innymi rozwiązywania równań, w tym kwadratowych!

Przykład z Al Chwarizmiego Rozwiązujemy równanie kwadratowe x 2 +10x=39 Co nam wolno? używać tylko liczb dodatnich (długości odcinków) dodawać i odejmować odcinki mnożyć (tworzyć prostokąty) pierwiastkować (wyznaczać bok kwadratu o zadanym polu) S=64 więc x=3

Przykład z Euklidesa Chcemy wyznaczyć Największy Wspólny Dzielnik dwóch liczb naturalnych NWD(m,n) Co nam wolno? To samo co poprzednio, a w szczególności: używać tylko liczb dodatnich (długości odcinków) dodawać i odejmować odcinki Euklides

NWD(m,n) Okazuje się, że nie ma wzoru na NWD(m,n), który działałby dla każdych m i n. Euklides zauważył pewien (wcale nieoczywisty) fakt: Jeśli od większej liczby odejmiemy mniejszą, ich NWD się nie zmieni.

NWD(m,n) dla 0 m n, n>0 Pierwszy pomysł: Euklides 1 Jeśli m=0 to NWD(m,n)=n Jeśli m>0 to NWD(m,n)=NWD(n m,m) Powyższy algorytm można zaprogramować za pomocą następującego kodu: Wczytaj(m,n); While m>0 do begin if m>n then Zamien(m,n); n:=n-m end; Wypisz(n)

Czy widzimy problem? Wykonajmy krótkie szacowanie: ile zajęłoby komputerowi wykonanie tego algorytmu dla n=10 30, m=1 na najszybszych obecnie dostępnych komputerach świata (~1THz)? Komputer ten byłby ok. 400-krotnie szybszy od mojego laptopa, więc z 10 9 uporałby się w 1/40 s. Ale 10 21 /40s = ponad 790 miliardów lat! To kilkadziesiąt razy więcej, niż trwa nasz Wszechświat! W szyfrowaniu RSA stosuje się liczby rzędu 10 200

Czy pora się poddać? Przyjrzyjmy się nieco dokładniej, jak działa nasz algorytm. Zauważmy, że wielokrotne odejmowanie mniejszej liczby od większej kończy się wtedy, gdy ta większa stopnieje poniżej tej odejmowanej. To co zostaje z większej, to nic innego, niż reszta z dzielenia n przez m. W tym momencie są one zamieniane i odejmowanie zaczynamy z nową, już mniejszą wartością, bo reszta jest zawsze ostro mniejsza od dzielnika. Czyli całe odejmowanie jednej wartości ma na celu jedynie wyznaczenie reszty z dzielenia!

Czy nie ma lepszej metody obliczania reszty z dzielenia? Pamiętamy choćby z III klasy szkoły podstawowej dzielenie w słupkach, które dałoby się jakoś pewnie zaimplementować cyfra po cyfrze. Zatem możemy nasz algorytm zmodyfikować: Euklides 2 Jeśli m=0 to NWD(m,n)=n Jeśli m>0 to NWD(m,n)=NWD(n mod m, m), gdzie mod oznacza resztę z dzielenia

Kod algorytmu Euklides 2 Powyższy algorytm można zaprogramować za pomocą następującego kodu: Wczytaj(m,n); While m>0 do begin r := n mod m; n := m; m := r end; Wypisz(n)

Czy cokolwiek zyskaliśmy? Tym razem na pewno złośliwymi danymi nie będą największa liczba z badanego zakresu oraz jedynka. Dla takich danych algorytm wykona jedno dzielenie i wyjdzie reszta zero, która zakończy całą zabawę. Żeby zorientować się, co nas może w najgorszym razie czekać, spróbujmy wygenerować dane, dla których algorytm Euklides 2 będzie działać najdłużej Jakie zatem dane są najbardziej złośliwe dla liczbpowiedzmy 30-cyfrowych?

Złożoność pesymistyczna... to liczba operacji, które algorytm wykona dla najbardziej złośliwych danych, czyli takich, które będą powodem możliwie długiej pracy algorytmu. Oczywiście musimy określić zakres, w jakim szukamy takich danych. Może spuśćmy nieco z tonu. Postarajmy się wygenerować najgorsze dane w zakresie 1..99. Dla jakiej pary liczb nasza pętla wykona się najwięcej razy?

Złożoność algorytmu Euklides 2 Odwróćmy kota ogonem. Zamiast pytać się, dla jakich danych w określonym zakresie program będzie działał najdłużej, zadajmy pytanie, jaki musi być co najmniej zakres, żeby wymusić konkretną liczbę obrotów pętli. Zacznijmy od małych wartości. Jakie najmniejsze dane spowodują 1 obrót pętli? Oczywiście (1,1). Dla dwóch obrotów pętli potrzebujemy co najmniej liczb (2,3), bo dzielnik musi być większy od 1, a dzielna od dzielnika.

..Złożoność algorytmu Euklides 2 Kolejne wartości: 3 obroty pętli: (3,5), bo żeby dostać najtańsze 2 obroty, czyli parę (2,3), dzielnikiem musi być 3, a możliwie mała dzielna dająca przy tym dzielniku resztę 2 i od niego większa, to 5. 4 obroty pętli: (5,8); dzielnik 5 i dzielna 5+3=8 5 obrotów pętli: (8,13); bo 13=8+5...itd Zawsze chodzi o to, żeby wynik dzielenia był równy 1

..Złożoność algorytmu Euklides 2 Podsumujmy rekordową parę (55,89) 9 obrotów: (55,89) (34,55) (21,34) (13,21) ( 8,13) ( 5, 8) ( 3, 5) ( 2, 3) ( 1, 2) Przyglądając sie drugiej kolumnie widzimy, że: nie da się 2 obrotów wykonać za pomocą liczb mniejszych od 3, nie da się 3 obrotów wykonać za pomocą liczb mniejszych od 5... nie da się 9 obrotów wykonać za pomocą liczb mniejszych od 89 itd... ( 0, 1)

Liczby Fibonacciego Widzimy więc, że najzłośliwsze pary, to takie liczby (licząc od dołu), że mniejsza z nich jest większą z liczb poprzedniej pary, a większa jest ich sumą. (55,89) (34,55) (21,34) (13,21) ( 8,13) ( 5, 8) ( 3, 5) ( 2, 3) ( 1, 2) ( 0, 1) Liczby w jednej kolumnie tworzą ciąg Fibonacciego F 0 = 0, F 1 = 1, F n = F n-1 + F n-2 dla n>1 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377... Leonardo Fibonacci

Liczby Fibonacciego Oto liczby obrotów pętli uzyskane dla możliwie złośliwych argumentów: (F 10,F 11 ) (F 9,F 10 ) (F 8,F 9 ) (F 7,F 8 ) (F 6,F 7 ) (F 5,F 6 ) (F 4,F 5 ) (F 3,F 4 ) (F 2,F 3 ) (F 0,F 1 ) 9 obrotów 8 obrotów 7 obrotów 6 obrotów 5 obrotów 4 obroty 3 obroty 2 obroty 1 obrót 0 obrotów Z pary (F n-1,f n ) dla n>2 uzyskujemy n-2 obroty pętli.

Liczby Fibonacciego Wśród liczb 30-cyfrowych zatem najgorsze będą te, które są możliwie dużymi liczbami Fibonacciego mieszczącymi się w tym zakresie. Numer większej z nich pomniejszony o 2 będzie szukaną liczbą obrotów pętli Kluczowe jest zatem pytanie, jak szybko rosną liczby Fibonacciego? Jeśli szybko, to dobrze! Bo numer liczby będzie nieduży.

Liczby Fibonacciego Sam Fibonacci nie umiał wyznaczyć wzoru na swoją n-tą liczbę. Dokonał tego w XVIII wieku wielki Leonard Euler, a ponownie odkrył ten wzór Jacques Binet w XIX w. Wzór Eulera-Bineta Jacques Binet Leonard Euler

Wnioski ze wzoru Eulera-Bineta Wprowadźmy oznaczenia Zatem liczby te są równe odpowiednio ok. 1.618... oraz -0.618..., a wzór Eulera-Bineta przyjmuje postać Teraz pomijając drugi składnik różnicy, dążący szybko do zera otrzymujemy prostszy wzór określający liczby Fibonacciego:

Wszechobecność liczby

Liczby Fibonacciego rosną wykładniczo szybko! Zatem od pewnego momentu każda kolejna liczba Fibonacciego jest od poprzedniej większa o ponad 60% Ponieważ chcemy znaleźć największą liczbę Fibonacciego nieprzekraczającą 10 30, więc chcemy rozwiązać nierówność ϕ n / 5 < 10 30, co po zlogarytmowaniu przy podstawie ϕ daje n-2 < 30log ϕ 10 = 148,33... Ostatecznie n 150.

Wygraliśmy! Okazuje się, że nawet dla tak ogromnych danych, jak liczby 30-cyfrowe, liczba obrotów pętli nie przekroczy 150 (a nawet 148). Jest jednak łyżka dziegciu: operację mod się trudniej programuje, niż odejmowanie (i nieco dłużej wykonuje), tym niemniej naprawdę warto!

Czy nie ma zatem metody szybkiej, ale też łatwwej do zaprogramowania? Spróbujmy zastanowić się, jak na NWD wpływa parzystość argumentów Dla m n NWD(m,n) wynosi Euklides 3: NWD(m,n)= n Jeśli m=0 2*NWD(m/2,n/2) jeśli m,n P NWD(m,n/2) jeśli m P n P NWD(m/2,n) jeśli m P n P NWD(n-m,m), jeśli m,n P

Analiza złożoności algorytmu Euklides 3 W każdym obrocie pętli wykonujemy dzielenie parzystych argumentów przez 2 lub odejmowanie nieparzystych Odjęcie jednej liczby nieparzystej od drugiej daje wynik parzysty. Zatem przynajmniej raz na dwa kroki przynajmniej jeden z argumentów podzielimy przez 2.

Analiza złożoności algorytmu Euklides 3 -cd. Zatem co najmniej raz na dwa obroty pętli wykonamy dzielenie przynajmniej jednego z argumentów przez 2. Zatem łączna liczba kroków algorytmu nie przekroczy 2(log m + log n).

Implementacja Euklides 3 Algorytm ten wykorzystuje łatwe do zaimplementowania operacje porównania liczb, odejmowania oraz dzielenia przez 2 i mnożenia przez 2. Każda z nich ma złożonośc liniową ze względu na długość zapisu pozycyjnego liczby, więc łączna złożoność jest rzędu (logn) 2 ; mamy bowiem logarytmicznie dużo obrotów pętli, każda z nich wykonuje logarytmicznie dużo działań na cyfrach.