Transcript Document

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
...
Studenci [INFORMATYCY] powinni
(czytaj muszą) BARDZO DOBRZE znać
ALGORYTMY i STRUKTURY DANYCH.
W tym celu przyda się znajomość następujących
przedmiotów:
1. Matematykę {Analiza mat;Algebra lin.;...}
2. Metody Numeryczne
3. Programowanie (Delphi , C++, Java, ??? )
4. ...
Konkretna Literatura (1- 6):
1.Niklaus Wirth, Algorytmy + struktury danych = programy, WNT,
Warszawa, 2002
2.Banachowski L.; Diks K.; Rytter W., Algorytmy i struktury danych,
WNT, Warszawa,1999
3.Timofiejew A. Algorytmy i struktury danych w językach
programowania, Wydawnictwo Akademii Podlaskiej, Siedlce, 2006
4.Aho A. V.; Hopcroft J. E.; Ullman J. D. Programowanie i Analiza
Algorytmów, Wydawnictwo HELION, Gliwice, 2003
5.Ostanin A. Metody i Algorytmy Optymalizacji, Wydawnictwo
Politechniki Białostockiej, Białystok, 2003
6.Wróblewski P. Algorytmy struktury danych i techniki programowania,
Wydawnictwo HELION, Gliwice, 1999
Literatura Uzupełniająca (7- 14):
7. Fichtenholz G.M. - Rachunek różniczkowy i całkowy, 3 tomy, PWN,
1994.
8. Leja F. - Rachunek różniczkowy i całkowy, PWN, 1959
9. Kisilewicz J., Język C++: programowanie obiektowe, Oficyna
Wydawnicza Politechniki Wrocławskiej, Wrocław, 2002.
10. Simon R., Koorhan L., Cox K. Programowanie obiektowe w Visual
Basic .NET dla każdego. Wydawnictwo HELION, Gliwice, 2003
11. Lipski W., Kombinatoryka dla programistów. Warszawa, WNT, 1982
12. M.Cichy, S. Szpakowicz, Pracownia programowania I, Wydawnictwa
Uniwersytetu Warszawskiego, Warszawa 1985
13. Harel D., Rzecz o istocie informatyki. Algorytmika, WNT, Warszawa,
2001
14. ++ Builder 5. Vademecum profesjonalisty. Tom 1,2, Wydawnictwo
HELION, 2001.
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


i ki , j  k n  i U i n  
1 
3 R
nR iU i 
 k  A

 A1
A
A 
A4 
A
A4 
1
  f i ,kj  A 6  1  3  7   f i k1, j 



 f i 1, j 
2
2
2



 2   2 2    


2



R






2














k 1
f i, j
 A3
 A3
A5 
A5 
k
k

  f i , j 1 
  A7
 f i , j 1 


0
2
2









2


2



R




2


2







 k
k
f  f  , j
 0, j
 f k 1
 1, j
fk  fk
i,0
i ,

n
 f i, j  1

n
t
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
1.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,
algorytmy zachł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"
Definicja ALGORYTMU:
Donald Knuth
I. 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.
II. Zespół reguł charakterystycznych dla
pewnych
obliczeń
lub
czynności
informatycznych.
Algorytm - metoda postępowania
Dane
Wyniki
Algorytm to metoda postępowania, która
prowadzi do rozwiązania jakiegoś problemu.
Pracę komputera możemy
podzielimy na 3 etapy:
2.
1. Wprowadzanie
przetwarzanie,
danych,
obliczenia
ALGORYTMY
3. wyprowadzanie
wyników
1. Włącz gaz;
2. Zagotuj wodę;
Algorytm, to skończony ciąg etapów,
które pozwalają przekształcić dane
informacje wejściowe w informacje
wyjściowe.
3. Wsyp do szklanki kawę;
4. Zalej kawę wrzącą wodą;
5. Dosyp cukru, jeśli lubisz;
6. Poczekaj kilka minut;
7. Wypij kawę
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
X>=0
NIE
Wypisz: -x
STOP
TAK
Wypisz: x
Przykładowy algorytm opisany za pomocą schematu blokowego
Zdefiniujmy iteracyjną wersję silni.
Dla przypomnienia: rekurencyjna
definicja silni wygląda następująco
silnia(0)=1
silnia(n)=n*silnia(n-1)
Przykładowy program obliczający silnię napisany w Pascalu
program silnia;
var
a:integer;
i:byte;
n:longint;
begin
end.
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;
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;
axb  0
ax bxc  0
2
Dziękuję za Uwagę
Zapraszam na następny Wykład
