Katedra Elektrotechniki Teoretycznej i Informatyki. sem. II - Elementy algorytmów. Dr hab. inż. M. Czyżak

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

Zaawansowane algorytmy i struktury danych

Definicje. Algorytm to:

Algorytm. a programowanie -

Metody numeryczne Wykład 4

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

dr inż. Damian Słota Gliwice r. Instytut Matematyki Politechnika Śląska

Algorytm. Krótka historia algorytmów

1 Wprowadzenie do algorytmiki

Zasady analizy algorytmów

Podstawy Programowania Algorytmy i programowanie

Wykład 2. Poprawność 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 )

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

Algorytmy komputerowe. dr inŝ. Jarosław Forenc

Technologie Informacyjne

Wykład z Technologii Informacyjnych. Piotr Mika

Podstawy Informatyki. Sprawność algorytmów

Metody numeryczne Numerical methods. Elektrotechnika I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny)

Metody numeryczne Numerical methods. Elektrotechnika I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny)

Analiza algorytmów zadania podstawowe

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

Algorytmy i struktury danych

Matematyczne Podstawy Informatyki

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

Katedra Elektrotechniki Teoretycznej i Informatyki. sem. III. Dr inż. M. Czyżak

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i struktury danych

Algorytm. Krótka historia algorytmów

Wstęp do informatyki- wykład 2

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

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

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Przykładowy program ćwiczeń

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

TEORETYCZNE PODSTAWY INFORMATYKI

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

Projektowanie i Analiza Algorytmów

automatyka i robotyka II stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

Algorytmy i Struktury Danych.

Algorytmy i schematy blokowe

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

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Wprowadzenie do algorytmiki

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

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 7 Algorytmy

Informatyka 1. Złożoność obliczeniowa

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)

Algorytmy i Struktury Danych

Schematy blokowe. Algorytmy Marek Pudełko

Rozdział 4. Algorytmy sortowania 73 Rozdział 5. Typy i struktury danych 89 Rozdział 6. Derekursywacja i optymalizacja algorytmów 147

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Algorytmy i Struktury Danych.

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

x y

INFORMATYKA SORTOWANIE DANYCH.

Algorytmy sortujące i wyszukujące

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

Efektywność algorytmów

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

Metody numeryczne. materiały do wykładu dla studentów

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

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

Algorytmy i struktury danych. Wykład 4

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.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Wstęp do programowania

Technologie informacyjne Wykład VII-IX

ECTS (Część 2. Metody numeryczne) Nazwa w języku angielskim: Algorithms and data structures.

2.8. Algorytmy, schematy, programy

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Jeszcze o algorytmach

POLITECHNIKA OPOLSKA

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

Informatyka A. Algorytmy

Metody numeryczne I Równania nieliniowe

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

Algorytmy. Programowanie Proceduralne 1

Wprowadzenie do algorytmów / Thomas H. Cormen [et al.]. - wyd. 7. Warszawa, Spis treści. Wprowadzenie 2

Zaawansowane algorytmy i struktury danych

Język ludzki kod maszynowy

Programowanie w VB Proste algorytmy sortowania

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

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

LICZBY PIERWSZE. Jan Ciurej Radosław Żak

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

Met Me ody numer yczne Wykład ykład Dr inż. Mic hał ha Łanc Łan zon Instyt Ins ut Elektr Elektr echn iki echn i Elektrot Elektr echn olo echn

Zaawansowane algorytmy. Wojciech Horzelski

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Technologie informacyjne - wykład 12 -

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

Wymagania na poszczególne oceny szkolne Klasa 7

Wymagania dla klasy siódmej. Treści na 2 na 3 na 4 na 5 na 6 Uczeń: Uczeń: Uczeń: Uczeń: Uczeń: DZIAŁ 1. LICZBY

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

Metody numeryczne Numerical methods. Energetyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólnoakademicki / praktyczny)

Wybrane zagadnienia teorii liczb

Transkrypt:

Katedra Elektrotechniki Teoretycznej i Informatyki sem. II - Elementy algorytmów Dr hab. inż. M. Czyżak

REGULAMIN zaliczeń i wystawiania ocen z przedmiotu Informatyka II realizowanych w Katedrze Elektrotechniki Teoretycznej i Informatyki na studiach stacjonarnych I stopnia na kierunku Elektrotechnika w sem. III, 2016/2017 1. Obecność studentów na wykładach i laboratorium jest obowiązkowa. 2. Na wykładzie i laboratorium obecność jest kontrolowana. W przypadku stwierdzenia 3 krotnej nieusprawiedliwionej nieobecności na laboratorium, student jest skreślany z listy uczestniczących w laboratorium i nie jest klasyfikowany. 3. Podczas semestru 2 krotnie przeprowadzane jest kolokwium na laboratorium (90 min) zgodnie z podanym harmonogramem laboratorium.

4. W przypadku usprawiedliwionej nieobecności na kolokwium, potwierdzonej zwolnieniem lekarskim, student jest zobowiązany w terminie 2 tygodni od daty zakończenia zwolnienia odrobić kolokwium w godzinach konsultacji. W przypadku nieobecności nieusprawiedliwionej lub nie odrobienia w podanym terminie usprawiedliwionej nieobecności na kolokwium, student otrzymuje 0 punktów z kolokwium. 5. Zaliczenie laboratorium następuje w oparciu o ilość punktów uzyskanych przez studenta. Podział punktów dla laboratorium na poszczególne elementy jest następujący: - kolokwia 60 pkt ( 2 x 30 pkt) - wejściówki 20 pkt - zadania domowe 20 pkt Zaliczenie laboratorium wymaga 60 pkt, konieczne jest też uzyskanie przynajmniej 30 pkt łącznie z kolokwiów. Zadania domowe należy oddać w terminie dwóch tygodni. Prowadzący zajęcia laboratoryjne wystawia oceny punktowe.

6. Zaliczenie części wykładowej następuje w oparciu o kolokwium organizowane na koniec semestru, prace domowe oraz obecność na wykładzie (80 pkt kolokwium, 20 pkt prace domowe). Student może dodatkowo uzyskać 10 pkt za zadania wykonywane na wykładzie (1 pkt za jedno zadanie, w przypadku niepoprawnego wykonania zadania 0.5 pkt). Zaliczenie części wykładowej wymaga uzyskania 60 pkt w tym przynajmniej 41 pkt z kolokwium wykładowego) 7. Na zakończenie zajęć w semestrze oblicza się końcową punktową ocenę każdego studenta, wg wzoru: Z 0.66* L 0.34* W gdzie: L ocena punktowa uzyskana z części laboratoryjnej, W ocena punktowa uzyskana z części wykładowej.

8. Ocenę końcową wystawia się wg progów punktowych przedstawionych w tabeli: Progi punktowe poniżej 60 Ocena niedostateczna 60-66 dostateczna 67-73 dość dobra 74-80 dobra 81-87 ponad dobra powyżej 88 bardzo dobra

9. Prowadzący laboratorium organizuje dodatkowe kolokwium zaliczające laboratorium bezpośrednio przed sesją podstawową oraz kolokwium zaliczające w sesji poprawkowej. W wyniku każdego z tych kolokwiów student może otrzymać połowę maksymalnej ilości punktów z kolokwiów czyli 30 pkt. 10. Dla studentów, którzy nie uzyskali wymaganego minimum punktów z kolokwium zaliczającego wykład, organizowane jest kolokwium poprawkowe z części wykładowej w sesji poprawkowej. 11. W wyniku kolokwium poprawkowego z części wykładowej można uzyskać tylko połowę maksymalnej liczby punktów, czyli 40 pkt. 12. Obliczanie ocen po sesji poprawkowej odbywa się z uwzględnieniem wyniku kolokwium poprawkowego oraz pozostałych elementów składających się na część laboratoryjną i wykładową.

Algorytm jest jednym z zasadniczych pojęć w informatyce. Dział nauki zajmujący się algorytmami jest określany jako "Teoria algorytmów", "Analiza algorytmów" czy też "Algorytmika". Algorytm ( nieformalne określenie) 1. Algorytm jest przepisem określającym krok po kroku rozwiązanie jakiegoś problemu lub też osiągnięcie pewnego celu.

2. Algorytm jest pewną ściśle określoną procedurą obliczeniową, która dla właściwych danych wejściowych, wytwarza dane wyjściowe zwane wynikiem działania algorytmu. Algorytm można też traktować jako sposób rozwiązania konkretnego problemu obliczeniowego. Postawienie takiego problemu polega na ustaleniu wymagań, co do relacji między danymi wejściowymi algorytmu, a danymi wyjściowymi, a algorytm opisuje procedurę obliczeniową, która zapewni, że relacja ta będzie osiągnięta.

Problemy, które można rozpatrywać w aspekcie ich rozwiązywania z użyciem algorytmów, można podzielić na następujące grupy: a) problemy niealgorytmiczne - wykazano, że nie mogą być rozwiązane za pomocą algorytmów w skończonym czasie Przykład 1. Pokrywanie powierzchni wielokątami o dowolnym kształcie. Wykazano, że to zadanie jest obliczeniowo nierozwiązywalne. Przykład 2. Rozwiązywanie równań diofantycznych x n y n z n Dla n=2 nieskończenie wiele rozwiązań w liczbach całkowitych, brak rozwiązań dla n>2.

b) problemy przypuszczalnie niealgorytmiczne - zadania dla których nie udało się znaleźć algorytmu o skończonym czasie działania, ale też nie udowodniono, że taki algorytm nie istnieje (nie mogą być rozwiązane za pomocą algorytmów w skończonym czasie) c) problemy wykładnicze - nie mają algorytmów ograniczonych przez wielomian zmiennej problemu ( np. n!)

d) problemy przypuszczalnie wykładnicze - nie udało się podać algorytmu wielomianowego, ale też nie udowodniono że nie ma takiego algorytmu. d) problemy wielomianowe - dla problemów tych istnieją algorytmy rozwiązujące je w czasie ograniczonym wielomianem zmiennej problemu. Kubale, M. Łagodne wprowadzenie do analizy algorytmów, Wyd. PG, 1999.

Słowo algorytm pochodzi od nazwiska matematyka arabskiego żyjącego w IX wieku Abu Ja'far Mohammed ibn Müsâ al Khowârizmî ( al Khorezmi, (ar.) z Chorezmu), nazwisko jego pisano w Europie jako Algorismus. Podał on w IX wieku reguły dodawania, odejmowania, mnożenia i dzielenia liczb dziesiętnych znane wcześniej w Indiach i Chinach.

Jednak za autora pierwszego algorytmu uważa się greckiego matematyka Euklidesa ( 365 p.n.e- 300 p.n.e), stworzył on słynny przepis na obliczanie największego wspólnego dzielnika dwóch liczb całkowitych a i b ( NWD, gcd - ang. greatest common divisor)

Algorytm Euklidesa - obliczanie gcd (a,b) gcd(a,0)=0 Dopóki b>0 wykonuj 1. c=a modulo b 2. a=b 3. b=c 4. gcd=a Operacja = oznacza, podobnie jak w języku C, podstawienie do zmiennej po lewej stronie, wartości wyrażenia po prawej stronie.

Przykład. Zastosowanie algorytmu Euklidesa dla a=30, b=21. I. II. III. 1. c=9 1. c=3 1. c=0 2. a=21 2. a=9 2. a=3 3. b=9 3. b=3 3. b=0 4. gcd=21 4. gcd=9 4. gcd=3 b>0 b>0 b=0, stop

1. Opis słowny Sposoby opisu (zapisu algorytmów) cz.1 2. Opis w postaci listy kolejnych kroków 3. Opis w języku programowania ( Pascal, C/C++) 4. Opis w postaci schematu blokowego Przykład. Opis słowny Algorytmy Cel działania algorytmu: algorytm sprawdza czy dana liczba naturalna N jest liczbą pierwszą. Realizacja algorytmu (algorytm): algorytm oblicza całkowitą resztę z dzielenia N przez kolejne liczby nieparzyste mniejsze lub równe N. Jeśli jakaś reszta jest równa zeru, algorytm przerywa działanie.

Sposoby opisu (zapisu algorytmów) cz.2 2. Opis w postaci listy kolejnych kroków Przykład. Zapis algorytmu Euklidesa w postaci listy kroków. Dane: Liczby całkowite a i b. Wynik: Największy wspólny dzielnik a i b, gcd(a,b). 1. Wczytaj a. 2. Wczytaj b. 3. Jeśli b=0, idź do kroku 10. 4. Oblicz c=a modulo b. 5. Wykonaj a=b. 6. Wykonaj b=c.

Sposoby opisu (zapisu algorytmów) cz.3 Przykład. Zapis algorytmu Euklidesa w postaci listy kroków ( cz. II). 7. Wykonaj gcd=a. 8. Jeśli b=0, idź do kroku 4. 9. Idź do kroku 11. 10. gcd=0. 11. Drukuj a, b, gcd. 12. STOP.

Sposoby opisu (zapisu algorytmów) cz.4 Przykład. Zapis algorytmu Euklidesa w postaci programu int main() { int a=30,b=21,c,gcd; do { c=a%b; a=b; b=c; gcd=a; } while ( b>0); printf("\n a=%d b=%d gcd=%d ",a,b,gcd); }

Sposoby opisu (zapisu algorytmów) cz.5 Sieci działań ( schematy blokowe) Autorem tej koncepcji jest John von Neumann. Zaproponował on w latach 50-tych formalizację algorytmów przy użyciu sieci działań. Sieci działań są geometrycznym sposobem zapisu algorytmów. Podstawą tej koncepcji jest podzielenie procesu rozwiązania na odrębne etapy, które w sieci działań przedstawia się w postaci bloków. Bloki są prostymi figurami geometrycznymi.

Sposoby opisu (zapisu algorytmów) cz.6 Sieci działań ( schematy blokowe) Wewnątrz bloków umieszcza się rodzaj czynności, którą symbolizuje dany blok. Bloki łączy się liniami, które ukazują ich powiązania logiczne, a strzałki wskazują na kolejność wykonywania poszczególnych w algorytmie. Algorytm przedstawiony w postaci sieci działań jest niezależny od języka programowania, w którym będzie napisany program.

Sposoby opisu (zapisu algorytmów) cz.7 Sieci działań ( schematy blokowe) Sieci działań mogą być pisane na różnym poziomie szczegółowości, lecz zwykle przyjmuje się, że każdy blok odpowiada jednej instrukcji programu realizującej pewne obliczenie lub instrukcji, która umożliwia podjęcie decyzji w algorytmie odnośnie dalszej jego realizacji.

Sposoby opisu (zapisu algorytmów) cz.8 Sieci działań ( schematy blokowe) Wewnątrz bloków sieci działań można stosować następujące symbole: - litery alfabetu łacińskiego i greckiego - cyfry systemu dziesiętnego - symbole działań arytmetycznych - dodawanie + - odejmowanie -,

Sposoby opisu (zapisu algorytmów) cz.9 Sieci działań ( schematy blokowe) - symbole działań arytmetycznych (c.d.) - mnożenie lub - dzielenie / - dzielenie całkowite - potęgowanie - pierwiastkowanie

Sposoby opisu (zapisu algorytmów) cz.10 Sieci działań ( schematy blokowe) - symbole działań logicznych - negacja ~ - koniunkcja - alternatywa

Sposoby opisu (zapisu algorytmów) cz.11 Sieci działań ( schematy blokowe) - symbole relacji - symbol podstawienia, : = - znaki interpunkcyjne,,,,, Wewnątrz bloków sieci działań można ponadto stosować liczby całkowite, rzeczywiste, zespolone jednak o wielkości odpowiadającej wielkości typów dla komputera, na którym będzie realizowany algorytm.

Sposoby opisu (zapisu algorytmów) cz.12 Sieci działań ( schematy blokowe) - stałe logiczne - stałe tekstowe - zmienne i wskaźniki do zmiennych (użycie zmiennej wskazuje, że będzie istniała komórka pamięci, o nazwie takiej, jak nazwa zmiennej)

Sposoby opisu (zapisu algorytmów) cz.13 Sieci działań ( schematy blokowe) - wyrażenia arytmetyczne i logiczne - funkcje ( wykładnicze, logarytmiczne, trygonometryczne, cyklometryczne, hiperboliczne i odwrotne do nich) - wartość bezwzględna - część całkowita

Sposoby opisu (zapisu algorytmów) cz.14 Sieci działań ( schematy blokowe) Symbole geometryczne - początek algorytmu START - koniec algorytmu STOP

Sposoby opisu (zapisu algorytmów) cz.15 Sieci działań ( schematy blokowe) Operator - działanie (operacja do wykonania) Operator wejścia/wyjścia wprowadzanie lub wyprowadzanie danych Operator - element decyzyjny- wybór jednej z dróg działania

Sposoby opisu (zapisu algorytmów) cz.16 Sieci działań ( schematy blokowe) Łącznik - łączy dwie części algorytmu Linia - łącząca poszczególne symbole sieci działań

Struktura algorytmów (cz.1) Opis algorytmu w postaci sieci działań wymaga zwykle niewielu podstawowych elementów takich jak - sekwencja operacji - przełącznik - pętla

Struktura algorytmów (cz.2) Sekwencja operacji Sekwencja operacji stanowi zbiór operacji realizowanych w określonej kolejności na określonych danych. Przykład. Realizacja obliczenia y ( c ( a b) 2 ) d

Struktura algorytmów (cz.3) wyznacz a+b wyznacz (a+b) 2 dane a,b,c,d y <- a+b y <-y*y dane a,b,c,d wyznacz c+(a+b) 2 y <-y+c wyznacz (c+(a+b) 2 )d y <-y*c

Struktura algorytmów (cz.4) Przełącznik Przełącznik jest elementem sprawdzającym spełnienie określonego warunku i wybierającego jedną z dwóch alternatywnych sekwencji operacji w zależności od tego czy warunek jest spełniony czy też nie. Przykład. TAK a>0 NIE Sekwencja 1 Sekwencja 2

Struktura algorytmów (cz.4) Pętla Pętla jest elementem umożliwiającą kolejną, wielokrotną realizację określonej operacji lub sekwencji operacji.

Ogólna struktura pętli Część inicjacyjna Część główna Część aktualizująca warunek Część decyzyjna Część wyjściowa

Przykład. Sieć działań dla obliczania sumy (cz. 1) S n 1 i 1 1 i

Przykład. Sieć działań dla obliczania sumy (cz. 2) START s<-0 s<-s+1/i i<-i+1 TAK i<n Drukuj s NIE STOP

Nauka o algorytmach to teoria algorytmów zwana też analizą algorytmów. Zajmuje się ona szukaniem najlepszych algorytmów dla rozwiązywania określonych zadań na komputerach, badaniem możliwości rozwiązania pewnych zadań jak również określaniem złożoności rozwiązań, o ile one istnieją.

Przykłady algorytmów (1) I. Algorytmy numeryczne 1. Interpolacja Lagrange a. 2. Interpolacja Aitkena-Lagrange a. 3. Aproksymacja wielomianowa. 4. Aproksymacja trygonometryczna. 5. Kwadratura Newtona-Cotesa. 6. Metoda całkowania Romberga. 7. Metoda rozwiązywania równań nieliniowych (bisekcja, metoda siecznych, metoda Newtona).

8. Rozwiązywanie układu równań z macierzą trójkątną. 9. Metoda eliminacji Gaussa. 10. Rozkład LU. Przykłady algorytmów (2) 11. Metoda Gaussa-Crouta. 12. Metoda eliminacji Jordana. 13. Obliczanie wyznacznika metodą rozkładu LU. 14. Odwracanie macierzy przy użyciu rozkładu LU. 15. Metoda Jacobiego rozwiązywania układu równań liniowych.

Przykłady algorytmów (3) 16. Metoda Gaussa-Seidela. 17. Rozkład QR macierzy metodą Grama-Schmidta. 18. Rozkład QR macierzy metodą Givensa. 19. Schemat Hornera obliczania wartości wielomianu. 20. Metoda relaksacyjna rozwiązywania układu równań liniowych. 21. Metoda Eulera rozwiązywania równań różniczkowych zwyczajnych. 22. Metoda Runge-Kutty rozwiązywania równań różniczkowych zwyczajnych. 23. Szybka transformacja Fouriera.

Przykłady algorytmów (4) II. Algorytmy przeszukiwania zbiorów danych 1. Przeszukiwanie binarne. 2. Przeszukiwanie z funkcją mieszającą. III.Algorytmy przeszukiwania tekstów. 1. Algorytm typu brute-force. 2. Algorytm K-M-P (Knutha, Morrisa, Pratta). 3. Algorytm Boyera-Moore a. 4. Algorytm Rabina-Karpa.

Przykłady algorytmów (5) IV. Algorytmy grafowe 1. Algorytm Floyda-Warshalla ( domknięcie przechodnie grafu, algorytm pozwala stwierdzić, czy istnieje droga między dwoma wierzchołkami grafu). 2. Algorytm Dijkstry (poszukiwanie najkrótszej drogi w grafie). 3. Algorytmy przeszukiwania grafów ( wszerz, w głąb) V. Algorytmy kompresji danych 1. Kompresja przez modelowanie matematyczne. 2. Kompresja metodą RLE. 3. Kompresja danych metodą Huffmana. 4. Kompresja LZW. Algorytmy

Przykłady algorytmów (6) VI. Algorytmy szyfrowania 1. Algorytm wymiany klucza Diffiego-Hellmana. 2. Algorytm RSA 3.Algorytm Rijndael. VII. Algorytmy teorioliczbowe (przykłady) 1. Obliczanie iloczynu Mongomery ego 2. Potęgowanie modulo n (n nieparzyste) z użyciem iloczynu Mongomery ego. 3. Chińskie twierdzenie o resztach.

Przykłady algorytmów (7) VIII. Algorytmy sortowania. 1. Sortowanie przez zamianę ( ang. exchange sort) ( przykład: sortowanie przez prostą zamianę). 2. Sortowanie przez wybieranie (ang. selection sort) (przykład sortowanie przez proste wybieranie) 3. Sortowanie przez proste wstawianie. 4. Sortowanie szybkie (ang. quicksort). 5. Sortowanie przez kopcowanie (ang. heapsort). 6. Sortowanie przez scalanie( ang. mergesort).

Sortowanie Sortowanie jest procesem ustawiania zbioru obiektów w określonym porządku. Sortowanie stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. Problem sortowania można sformułować następująco: Dane są obiekty a 1, a,..., 2 a n

Sortowanie (niemalejąco) polega na przestawianiu tych obiektów aż do chwili osiągnięcia uporządkowania a k a,..., 1 k2, a k 3 takiego, że dla danej funkcji porządkującej f zachodzi związek: f ( a ) f ( a )... f ( a k1 k2 k 3 )

Zwykle nie oblicza się wartości funkcji porządkującej, lecz przechowuje się je w jawnej postaci jako składowe każdego obiektu. Wartość tej funkcji nazywana jest kluczem obiektu. Dla tablic kluczem obiektu jest wartość elementu.

Przykłady algorytmów (5) IV. Algorytmy sortowania. 1. Sortowanie przez zamianę ( ang. exchange sort) ( przykład: sortowanie przez prostą zamianę). 2. Sortowanie przez wybieranie (ang. selection sort) ( przykład sortowanie przez proste wybieranie) 3. Sortowanie przez proste wstawianie. 4. Sortowanie szybkie (ang. quicksort). 5. Sortowanie przez kopcowanie (ang. heapsort) 6. Sortowanie przez scalanie ( ang. merge sort)

Sortowanie przez prostą zamianę ( sortowanie bąbelkowe) Metoda ta polega na porównywaniu w kolejnych przebiegach kluczy kolejnych sąsiadujących elementów (dla tablic wartości elementów tablicy) i ewentualnej zamianie miejscami tych elementów, jeżeli nie spełniają zadanej relacji. Po zakończeniu danego przebiegu następuje sprawdzenie czy nastąpiły w nim zamiany. Jeśli tak, realizowany jest kolejny przebieg, jeśli nie, to sortowanie zostało zakończone.

Sortowanie przez prostą zamianę (sortowanie bąbelkowe) Przykład. Posortować niemalejąco tablicę 5-elementową zawierającą elementy 8,6,10,2,1. Pokazane zostaną poniżej stany tablicy w kolejnych przebiegach. I. przebieg II. przebieg III. przebieg IV. przebieg V. przebieg 8,6,10,2,1 6,8,2,1,10 6,2,1,8,10 2,1,6,8,10 1,2,6,8,10 6,8,10,2,1 6,8,2,1,10 2,6,1,8,10 1,2,6,8,10 1,2,6,8,10 6,8,10,2,1 6,2,8,1,10 2,1,6,8,10 1,2,6,8,10 1,2,6,8,10 6,8,2,10,1 6,2,1,8,10 2,1,6,8,10 1,2,6,8,10 1,2,6,8,10 6,8,2,1,10 6,2,1,8,10 2,1,6,8,10 1,2,6,8,10 1,2,6,8,10

Sortowanie przez prostą zamianę (bąbelkowe) #define N 5 // sortowanie niemalejąco #include <stdio.h> #include <conio.h> int main(int argc, char **argv) { int i, nr=1,p, zam; int a[5]={8,6,10,2,1}; do { zam=0; printf("\n przebieg nr=%d",nr++); for (i=0;i<n -1;i++) if (a[i+1]<a[i]) { p=a[i]; a[i]=a[i+1]; a[i+1]=p; zam=1; } } while (zam); printf("\n Stan tablicy po sortowaniu"); for (i=0;i<n;i++) printf("\n % d ",a[i]); getchar(); return 0;}

Sortowanie przez proste wybieranie Metodę tę można opisać następująco:( sortowanie niemalejąco) - wybrać element o najmniejszym kluczu ( dla tablic element o najmniejszej wartości) - wymienić go z pierwszym elementem. Operacje te powtarza się z pozostałymi n-1 obiektami, następnie z n-2 obiektami, aż pozostanie jeden obiekt - największy.

Przykład. Posortować niemalejąco przy użyciu algorytmu prostego wybierania tablicę 5- elementową przy użyciu zawierającą elementy 8,6,10,2,1. Pokazane zostaną poniżej kolejne stany tablicy w trakcie sortowania. 8 6 10 2 1 1 6 10 2 8 1 6 10 2 8 zamieniane elementy 8 i 1 stan po pierwszej zamianie zamieniane elementy 6 i 2 1 2 10 6 8 1 2 10 6 8 stan po drugiej zamianie zamieniane elementy 10 i 6 1 2 10 6 8 stan po trzeciej zamianie 1 2 6 10 8 zamieniane elementy 8 i 10 1 2 6 8 10 tablica posortowana

// Sortowanie przez proste wybieranie #define N 5 #include <stdio.h> #include <conio.h> int main(int argc, char **argv) { int i,j,k,p,amin; int a[5]={8,6,10,2,1}; for (i=0;i<n;i++) { amin=a[i]; k=i; for (j=i+1;j<n-1;j++) if (a[j]<amin) { amin=a[j]; k=j; } if (k!=i) { p=a[i]; a[i]=a[k]; a[k]=p; } } printf("\n Stan tablicy po sortowaniu"); for (i=0;i<n;i++) printf("\n % d ",a[i]); getchar(); return 0;}

Podstawowe własności algorytmów a) własność stopu b) poprawność Def. (poprawność algorytmu) Algorytm jest poprawny, gdy dla każdego egzemplarza problemu zatrzymuje się i daje poprawny wynik. c) stabilność numeryczna d) złożoność obliczeniowa

Elementy analizy algorytmów Analiza algorytmu (analiza złożoności obliczeniowej) polega na określeniu zasobów, jakie są potrzebne do jego wykonania. Zasobami zasadniczymi są czas obliczeń i wielkość potrzebnej pamięci. Obecnie ważniejszym parametrem jest czas obliczeń. Zwykle rozpatruje się przypadek pesymistyczny dla czasu działania algorytmu.

Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla każdych danych wejściowych. Znając ten czas, mamy gwarancję, że algorytm nie będzie działał dłużej (taki czas może często występować w praktyce, np. przy poszukiwaniu w bazie danych informacji, której tam nie ma).

Czas działania algorytmu może być opisany pewną funkcją np. t = f(n)=an 2 +bn +c, gdzie n reprezentuje rozmiar danych wejściowych. Można zauważyć, że dla dużych n znaczenie ma głównie pierwszy składnik. Przyjmując przykładowo a=1, b=1, c=1 n an 2 bn c t 10 100 10 1 111 100 10000 100 1 10111 1000 1000000 1000 1 1001001

Pojawia się tutaj pojęcie rzędu wielkości funkcji. Rząd wielkości funkcji określa jak zmienia się składnik najbardziej istotny. Uważa się, że dany algorytm jest lepszy, jeśli jego pesymistyczny czas działania jest funkcją niższego rzędu.

Przykład. Dla funkcji f(n) i czasu z poniższej tabeli wyznaczyć największy rozmiar problemu, który może być rozwiązany w czasie t, zakładając, że algorytm działa w ciągu f(n) mikrosekund. f(n) n 1 sek 1 min 1 dzień 1 miesiąc log n n n n log n n 2 n 3 2 n n!

Symbol Algorytmy Notacje asymptotyczne (1) Niech g:r * R * będzie funkcją rzeczywistą zmiennej n. Mówimy, że funkcja jest (g(n)), gdy istnieją stałe c 1,, c 2 R * i x 0 R * takie, że c 1 g(n) f(n)) c 2 g(n) dla wszystkich n n 0. Mówimy wówczas,że funkcje są tego samego rzędu. (log n) - logarytmiczna (n) - liniowa c 1 g(n) f(n) (n log n) - logarytmiczno-liniowa c 2 g(n) (n 2 ) - kwadratowa (2 n ) - wykładnicza n 0 n

Symbol O( ) Algorytmy Notacje asymptotyczne (2) Niech g:r * R * będzie funkcją rzeczywistą zmiennej n. Przez O(g) oznaczymy zbiór funkcji f:r * R *, takich, że dla pewnego c R * i x 0 R * mamy f(n)) c g(n) dla wszystkich n n. } Symbol O(g) 0 czytamy " O duże od n", zaś o funkcji f mówimy, "że jest duże O od g" c 1 g(n) f(n) n

Rząd złożoności obliczeniowej Klasa funkcji Typ funkcji Przykłady subliniowa stała (e -n sin 2 n), (1/n) polilogarytmiczna (log log n), (log 2 n) liniowa (n), (n(1+n) n ) wielomianowa quasi-liniowa (n log n), (n loglog n) kwadratowa superwielomianowa (n 2 ), (n/2) (n log n ), () niewielomianowa wykładnicza (2 n ), (n 2 3 n ) n n superwykładnicza ( 2 ), (n n )

Złożoność obliczeniowa a programowanie algorytmów Generalnie powinno się stosować algorytmy o możliwie najmniejszej złożoności obliczeniowej, lecz w praktyce powinno się też uwzględnić dodatkowe czynniki: 1. Gdy program będzie używany niewiele razy, to koszt napisania i uruchomienia programu jest większy od pozostałych kosztów. 2. Jeśli program będzie wykonywany na małych danych, istotna jest wielkość stałej proporcjonalności c. 3. Program nie powinien być skomplikowany ( o ile to możliwe), gdyż utrudnia to wprowadzanie zmian 4. Istnieją algorytmy o dużej złożoności dla najgorszego przypadku, a działające szybko dla przypadku przeciętnego. 5. Dla algorytmów działających na liczbach rzeczywistych są ważne dokładność, a także wrażliwość numeryczna. Żródło Kubale M. Łagodne wprowadzenie do algorytmów.