Algorytmy
Transkrypt
Algorytmy
Elwira Wachowicz ([email protected]) Algorytmy Elwira Wachowicz [email protected] 14 marca 2013 Algorytmy 14 marca 2013 1 / 20 Algorytm (arab.): przepis na rozwiązanie danego zagadnienia matematycznego (np. algorytm obliczania pierwiastka równania kwadratowego); metoda postępowania zawierająca wszystkie formuły obliczeniowe, określająca kolejność ich stosowania, warunki, przy których stosuje się tę lub inną formułę, zasady przechodzenia od jednego etapu procesu obliczeniowego do następnego oraz informacje o rodzajach i własnościach odpowiednich obiektów matematycznych: liczb, wektorów, macierzy, a także tablic, które są danymi początkowymi zadania lub pojawiają się podczas obliczeń; algorytmy są podstawą programów dla maszyn matematycznych. Encyklopedia PWN, 1973 r Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 2 / 20 Cechy algorytmu Algorytm: Szczegółowy Jednoznaczny Powinien mieć początek i koniec Posiada zbiór danych wejściowych, dla których kończy się sukcesem. Efektywność: proste operacje i realizacja w rozsądnym czasie. Daje oczekiwane rezultaty dla różnych danych wejściowych. Musimy znać elementarny „poziom wiedzy” komputera! Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 3 / 20 Obliczanie największego wspólnego dzielnika dwóch liczb Algorytm Euklidesa (IV w. p.n.e..) do obliczania największego wspólnego dzielnika (NWD) dwóch liczb naturalnych m i n (m > 0 i m ≥ n): Czynność 1: sprawdź, czy n = 0; jeśli tak, to zakończ – szukanym NWD jest m; jeśli nie, przejdź do czynności 2. Czynność 2: oblicz resztę z dzielenia m przez n, oznacz ją przez r i przejdź do czynności 1, ale z innymi liczbami: n teraz równym r i m równym poprzedniej wartości n. Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 4 / 20 Jak budować algorytmy Wyznaczenie osiągalnego i jednoznacznego celu. Podanie sposobu rozwiązania. Która z 3 liczb a, b i c jest największa? 1 Weź liczby a i b. 2 a > b ? Tak → pkt. 3. Nie → pkt. 4. 3 Weź liczby a i c. a > c ? Tak → pkt. 5. Nie → pkt. 7. 1 Weź liczby b i c. b > c ? Tak → pkt. 6. Nie → pkt. 7. a > b i a > c? Tak → a największe. Nie → pkt. 2. 2 b > c ? Tak → b największe. Nie → c największe. 4 5 Największą liczbą jest a. 6 Największą liczbą jest b. 7 Największą liczbą jest c. Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 5 / 20 Jak zapisywać algorytmy Pierwiastki równania kwadratowego: 1 2 Czy a = 0? TAK → pkt. 2. NIE → pkt. 3. Czy b = 0? TAK → pkt. 2a. NIE → pkt. 2b (a) (b) 3 4 Czy c = 0? TAK → spełnione dla każdego x. STOP. NIE → Niespełnione dla żadnego x. STOP. Oblicz x = −c/b. STOP Oblicz ∆ = b2 − 4ac Czy ∆ > 0? TAK → pkt 4a. NIE → pkt. 4b. (a) (b) √ √ Oblicz x1 = (−b − ∆)/2a, x2 = (−b + ∆)/2a. STOP. Czy ∆ = 0? TAK → Oblicz x = −b/2a. STOP. NIE → Równanie niespełnione dla żadnego x. STOP. Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 6 / 20 Start Dane a,b,c TAK a=0 NIE Δ=b2-4ac Δ>0 TAK b=0 c=0 NIE x=-c/b NIE TAK x1=(-b-√Δ)/2a Δ=0 TAK NIE Spełnione dla dowolnego x. NIE TAK x=-b/2a Niespełnione dla żadnego x. x2=(-b+√Δ)/2a Elwira Wachowicz ([email protected]) Stop Algorytmy 14 marca 2013 7 / 20 Zastany stan wiedzy Zakładamy, że komputer zna podstawowe operacje: arytmetyczne: dodawanie, odejmowanie, mnożenie, dzielenie, pierwiastkowanie, logarytmowanie, obliczanie wartości bezwzględnej i podstawowych funkcji trygonometrycznych (sin, cos ...); logiczne. Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 8 / 20 Obliczanie sumy n liczb n=5 Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 9 / 20 Obliczanie sumy n liczb Czy jest to najprostszy algorytm? Dla człowieka tak, dla maszyny nie. Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 10 / 20 Obliczanie sumy n liczb Elwira Wachowicz ([email protected]) Poprawny algorytm powinien zliczać ilość zliczanych elementów i odpowiednio zakończyć program. Algorytmy 14 marca 2013 11 / 20 Obliczanie sumy n liczb Elwira Wachowicz ([email protected]) Potrzebny licznik – i. Algorytmy 14 marca 2013 12 / 20 Obliczanie sumy n liczb Elwira Wachowicz ([email protected]) s i czy i ≤ 4 ? koniec? 0 1 tak nie 1 2 tak nie 3 3 tak nie 6 4 tak nie 10 5 nie tak To nie jest ścisły dowód poprawności algorytmu! Algorytmy 14 marca 2013 13 / 20 Znajdowanie największej liczby w zbiorze Elwira Wachowicz ([email protected]) Mamy zbiór n liczb: a1 , a2 , ...., an Komputer potrafi porównywać liczby parami. Najlepiej rozbić zadanie na kawałki Algorytmy 14 marca 2013 14 / 20 Znajdowanie największej liczby w zbiorze Elwira Wachowicz ([email protected]) Mamy n=4 liczby: 17, -2, 37 i 9. m i ai+1 i≤4? m ≥ ai+1 koniec? 17 1 -2 tak tak nie 17 2 37 tak nie nie 37 3 9 tak tak nie 37 4 – tak – tak Zadanie domowe: Proszę wymyślić algorytm do prostego sortowania n liczb. Algorytmy 14 marca 2013 15 / 20 Język C Został stworzony w 1972 r. przez Dennisa Ritchie’go w Bell Labs. Powstał jako język dla programistów. Jeden z najpopularniejszych języków programowania. Zalety: udostępnia wszystkie funkcje sterujące ważne w teorii i praktyce programowania, wydajny: niewielki rozmiar kodu, duża szybkość, przenośny, potężny i elastyczny. Wady: zwięzłość w połączeniu z bogactwem operatorów może dać niezwykle zawikłany kod Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 16 / 20 Korzystanie: 7 kroków Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 17 / 20 Pisanie kodu Dowolny edytor tekstu. Przykładowy program: #include <stdio.h> int main (void) { printf("Moj pierwszy program."); return 0; } Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 18 / 20 Kompilacja Najprostszy sposób w linuxie: $gcc program.c Jeśli nie będzie błędów otrzymamy plik a.out $./a.out Gdy chcemy otrzymać plik wykonywalny o nazwie program.x: $gcc -o program.x program.c Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 19 / 20 Typowy program w C Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 20 / 20 Prosty przykład #include <stdio.h> int main(void) { int num; num = 1; /* prosty program */ /* definiujemy zmienna o nazwie num /* przypisujemy jej wartosc */ */ printf("Jestem prostym "); /* korzystamy z funkcji printf() printf("komputerem.\n"); printf("Moja ulubiona liczba to %d, bo jest pierwsza.\n",num); return 0; */ } Po wykonaniu dostaniemy: Jestem prostym komputerem. Moja ulubiona liczba to 1, bo jest pierwsza. Elwira Wachowicz ([email protected]) Algorytmy 14 marca 2013 21 / 20