320 likes | 599 Views
ALGORYTMY i STRUKTURY DANYCH. WYKŁAD 01 dr Marek Siłuszyk WSFiZ. Plan wykładu:. Czego nie robimy na Wykładzie !!! Informacje ogólne Konkretna Literatura Rozkład materiału Co to jest AiST ? Czym się zajmuje ? Przykład ALGORYTMU. ZAKAZ. NIE WOLNO !!!. 1. UŻYWAĆ TELEFONU.
E N D
ALGORYTMY i STRUKTURY DANYCH WYKŁAD 01 dr Marek Siłuszyk WSFiZ
Plan wykładu: • Czego nie robimy na Wykładzie !!! • Informacje ogólne • Konkretna Literatura • Rozkład materiału • Co to jest AiST? • Czym się zajmuje ? • Przykład ALGORYTMU • ...
ZAKAZ NIE WOLNO !!! 1. UŻYWAĆ TELEFONU 2. ŻUĆ GUMY
Studenci [INFORMATYCY] powinni(czytaj muszą) BARDZODOBRZE znać ALGORYTMY i STRUKTURY DANYCH. • W tym celu przyda się znajomość następujących przedmiotów: • Matematykę {Analiza mat;Algebra lin.;...} • Metody Numeryczne • Programowanie (Delphi , C++, Java, ??? ) • ...
Konkretna Literatura (1- 6): • Niklaus Wirth, Algorytmy + struktury danych = programy, WNT, Warszawa, 2002 • Banachowski L.; Diks K.; Rytter W., Algorytmy i struktury danych, WNT, Warszawa,1999 • Timofiejew A. Algorytmy i struktury danych w językach programowania, Wydawnictwo Akademii Podlaskiej, Siedlce, 2006 • Aho A. V.; Hopcroft J. E.; Ullman J. D. Programowanie i Analiza Algorytmów, Wydawnictwo HELION, Gliwice, 2003 • Ostanin A. Metody i Algorytmy Optymalizacji, Wydawnictwo Politechniki Białostockiej, Białystok, 2003 • Wróblewski P. Algorytmy struktury danych i techniki programowania, Wydawnictwo HELION, Gliwice, 1999
Literatura Uzupełniająca (7- 14): • Fichtenholz G.M. - Rachunek różniczkowy i całkowy, 3 tomy, PWN, 1994. • Leja F. - Rachunek różniczkowy i całkowy, PWN, 1959 • Kisilewicz J., Język C++: programowanie obiektowe, Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław, 2002. • Simon R., Koorhan L., Cox K. Programowanie obiektowe w Visual Basic .NET dla każdego. Wydawnictwo HELION, Gliwice, 2003 • Lipski W., Kombinatoryka dla programistów. Warszawa, WNT, 1982 • M.Cichy, S. Szpakowicz, Pracownia programowania I, Wydawnictwa Uniwersytetu Warszawskiego, Warszawa 1985 • Harel D., Rzecz o istocie informatyki. Algorytmika, WNT, Warszawa, 2001 • ++ Builder 5. Vademecum profesjonalisty. Tom 1,2, Wydawnictwo HELION, 2001.
PROŚCIUTKI PRZYKŁAD Rozwiązywanie zjawisk problemów, za pomocą odpowiedniego ALGORYTMU Jako przykład rozważmy zagadnienie fizyczne: Jak przedstawia się rozkład przestrzenny cząstek galaktycznego promieniowania kosmicznego ? W skrócie można to przedstawić np. tak
Ile jest cząstek ? Problem [zagadnienie] Matematyka [równanie] ALGORYTM Informatyka rozwiązanie
PROGRAM WYKŁADU 1. Algorytmy komputerowe 2. Programowe typy danych 3. Złożone obiekty programowe 4. Reprezentacja danych 5. Operacje nad listami 6. Operacje nad grafami 7 .Operacje nad drzewami 8. Operacje nad sieciami 9. Algorytmy do przetwarzania danych 10. Algorytmy sortowania w tablicach 11. Algorytmy sortowania w plikach 12. Algorytmy wyszukiwania
Algorytmy i struktury danych: Dane i operacje na danych, pojęcie typu. Poprawność i złożoność algorytmu. Metody układania algorytmów: Zstępująca, Dziel i rządź, ... Programowanie dynamiczne, Algorytmy zachłanne, Algorytmy z nawrotami. Wyszukiwanie i sortowanie. Abstrakcyjne struktury danych (lista, stos, kolejka, słownik, kolejka priorytetowa) i metody ich realizacji. Struktury drzewiaste. Grafy, sposoby ich reprezentacji, Podstawowe algorytmy grafowe.
ZAŁOŻENIA I CELE Głównym celem wykładu jest nabycie wiedzy o najważniejszych „klasycznych” algorytmach opracowywania danych i metodach tworzenia złożonych struktur danych. Celem zajęć laboratoryjnych jest nabycie i opanowanie umiejętności programowania i korzystania z algorytmów opracowywania danych.
WYKŁAD • Algorytmy komputerowe • definicja algorytmu • formy zapisu algorytmu • własności algorytmu (poprawność, skończoność, • złożoność obliczeniowa i efektywność praktyczna) • metody układania algorytmów (metody zstępująca, dziel i rządź, programowanie dynamiczne, algorytmyzachłanne, z nawrotami), • porównanie algorytmów • ocena złożoności algorytmu • interpretacja algorytmu w komputerze • pomiar czasu wykonania programów
Rys Historyczny Termin ALGORYTM pochodzi od nazwiska perskiego pisarz-matematyka Abu Ja’far Mohammed ibn Musa Al.-khowarizmi {VIII-IX wiek n.e.}. Podał On klarowne reguły wyjaśniające krok po kroku zasady operacji arytmetycznych wykonywanych na liczbach dziesiętnych. Algorytm łączy się często ze słynnym greckim matematykiem Euklidesem {365-300 p.n.e.}. Bardzo znany jest przepis (wzór, algorytm, reguła, ...) na obliczanie największego wspólnego dzielnika dwóch liczb a i b (NWD)
"Języki programowania pojawiają się i odchodzą,lecz algorytmy wytrzymują próbę czasu"Donald Knuth • Definicja ALGORYTMU: • Skończony ciąg/sekwencja reguł, które aplikuje się na skończonej liczbie danych, pozwalający rozwiązać zbliżone do siebie klasy problemów. • Zespół reguł charakterystycznych dla pewnych obliczeń lub czynności informatycznych.
Algorytm - metoda postępowania Algorytm Dane Wyniki Algorytm to metoda postępowania, która prowadzi do rozwiązania jakiegoś problemu.
Pracę komputera możemy podzielimy na 3 etapy: 3. wyprowadzanie wyników • Wprowadzanie • danych, 2. przetwarzanie, obliczenia ALGORYTMY
Mój pierwszy ALGORYTM Algorytm, to skończony ciąg etapów, które pozwalają przekształcić dane informacje wejściowe w informacje wyjściowe. • Włącz gaz; • Zagotuj wodę; • Wsyp do szklanki kawę; • Zalej kawę wrzącą wodą; • Dosyp cukru, jeśli lubisz; • Poczekaj kilka minut; • Wypij kawę
Schematy blokowe Schematy blokowe są tzw. metajęzykiem. Jest to język bardzo ogólny, służy do opisywania algorytmów w taki sposób, by na jego podstawie można było je zaimplementować w dowolnym języku. Schematy blokowe zbudowane są z prostych figur geometrycznych, np. prostokąt, romb, koło, równoległobok itd... W polach tych figur umieszczamy warunki oraz proste instrukcje, przy czym mogą być one związane z jakimś konkretnym językiem (np. symbolem instrukcji przypisania może być ":=" tak, jak w Pascalu lub "=" tak, jak w C) Czasami instrukcję przypisania zapisuje się jako strzałkę skierowaną od wartości przypisywanej do zmiennej.
Oznaczenia: Poszczególne elementy schematu łączy się za pomocą strzałek. W większości przypadków blok ma jedną strzałkę wchodzącą i jedną wychodzącą, lecz są także wyjątki. Ta figura oznacza początek lub koniec algorytmu. W każdym algorytmie musi się znaleźć dokładnie jedna taka figura z napisem "Start" oznaczająca początek algorytmu oraz dokładnie jedna figura z napisem "Stop" oznaczająca koniec algorytmu. Błędem jest umieszczanie kilku stanów końcowych, zależnych od sposobu zakończenia programu. Blok symbolizujący początek algorytmu ma dokładnie jedną strzałkę wychodzącą a blok symbolizujący koniec ma co najmniej jedną strzałkę wchodzącą. Prostokąt oznaczająca proces. W obrębie tej figury umieszczamy wszelkie obliczenia lub podstawienia. Proces ma dokładnie jedną strzałkę wchodzącą i dokładnie jedną strzałkę wychodzącą.
Romb symbolizuje blok decyzyjny. Umieszcza się w nim jakiś warunek (np. "x<0"). Z dwóch wybranych wierzchołków rombu wyprowadzamy dwie możliwe drogi: • gdy warunek jest spełniony (strzałkę wychodzącą z tego wierzchołka należy opatrzyć etykietą "Tak") • gdy warunek nie jest spełniony (etykieta „Nie") . • Każdy romb ma dokładnie jedną strzałkę wchodzącą oraz dokładnie dwie strzałki wychodzące. • Równoległobok jest stosowany do odczytu lub zapisu danych. W jego obrębie należy umieścić stosowną instrukcję np. Write(x) lub Read(x) (można też stosować opis słowny np. "Drukuj x na ekran"). Ma dokładnie jedną strzałkę wchodzącą i jedną wychodzącą. • Ta figura symbolizuje proces, który został już kiedyś zdefiniowany. Można ją porównać do procedury, którą definiuje się raz w programie, by następnie móc ją wielokrotnie wywoływać. Warunkiem użycia jest więc wcześniejsze zdefiniowanie procesu. Podobnie jak w przypadku zwykłego procesu i tu mamy jedno wejście i jedno wyjście.
Koło symbolizuje tzw. łącznik stronicowy. Może się zdarzyć, że chcemy "przeskoczyć" z jednego miejsca na kartce na inne (by nie krzyżować strzałek). Możemy w takim wypadku posłużyć się łącznikiem. Umieszczamy w jednym miejscu łącznik z określonym symbolem w środku (cyfra, liter) i doprowadzamy do nie go strzałkę. Następnie w innym miejscu kartki umieszczamy drugi łącznik z takim samym symbolem w środku i wyprowadzamy z niego strzałkę. Łącznik jest często porównywany do teleportacji (z jednego miejsca na kartce do drugiego). Łączniki występują w parach, jeden ma tylko wejście a drugi wyjście. Ten symbol to łącznik między stronicowy. Działa analogicznie jak koło, lecz nie w obrębie strony. Przydatne w złożonych algorytmach, które nie mieszczą się na jednej kartce. Uwaga: jeśli stosujemy oba typy łączników w schemacie, to najlepiej jest stosować litery do identyfikowania jednych i liczby do drugich. Dzięki temu nie dojdzie do pomyłki.
Schemat blokowy algorytmu obliczania wartości bezwzględnej danej liczby. Wartością bezwzględną liczby nieujemnej jest ta sama liczba, a wartością bezwzględną liczby ujemnej jest liczba do niej przeciwna. START Podaj: x TAK Wypisz: x X>=0 NIE Wypisz: -x STOP
Przykładowy algorytm opisany za pomocą schematu blokowego Zdefiniujmy iteracyjną wersję silni. Dla przypomnienia: rekurencyjna definicja silni wygląda następującosilnia(0)=1silnia(n)=n*silnia(n-1)
Przykładowy program obliczający silnię napisany w Pascalu program silnia; var a:integer; i:byte; n:longint; begin repeat writeln ('Podaj liczbę’); readln(a); until (a >= 0); n:=1; for i:=1 to a do n:=n*i; writeln('Wynik to:',n); readln; end.
Algorytm Euklidesa naprawdę nie wymyślił go Euklides, a Eudoksos z Knidos (IV wiek p.n.e.). Euklides jedynie algorytm ten zawarł w swoim dziele Elementy. Algorytm znajdowania największego wspólnego dzielnika (NWD) dwóch różnych liczb naturalnych. Dopóki x różne od y wykonuj:Jeżeli x>y, to odejmij y od x i wynik podstaw na x; W przeciwnym przypadku od y odejmij x i wynik podstaw na y;koniec dopóki wynikiem jest y Przykład dla algorytmu Euklidesa Dane x =21, y =12.(x,y) (21,12) (9,12) (9,3) (6,3) (3,3) Wynik 3 Dopóki x różne od y,od większej z liczb x, y odejmuj mniejszą. Wynikiem jest y.
function NWD(a,b : integer) : integer; begin while a <> b do if a > b then a := a - b else b := b - a; NWD := a; end;
Jak rozwiązać równanie liniowe ?
Jak rozwiązać równanie kwadratowe ? Praca domowa
Dziękuję za Uwagę Zapraszam na następny Wykład