07.03.2017 1 System komputerowy

advertisement
07.03.2017
System komputerowy -architektura
Rozwój nowoczesnych technik
obliczeniowych
Magistrala systemowa (System Bus)
Budowa komputera, algorytmika i języki
programowania
Cezary Bolek
Pamięć operacyjna
ROM, RAM
Katedra Informatyki
Magistrala systemowa
Układy we/wy
In/Out
Jednostka centralna
CPU
CPU i pamięć RAM
Magistrala danych
Magistrala adresowa
Magistrala sterująca
Magistrala danych
Magistrala adresowa
ROM, RAM
CPU
In/Out
Magistrala sterująca
ROM, RAM
CPU
In/Out
Magistrala danych – służy do przesyłania danych pomiędzy komórkami pamięci,
rejestrami procesora oraz układami we/wy.
Magistrala adresowa – służy do przesyłania adresów komórek pamięci
(lub układów we/wy), które biorą udział w operacji odczytu lub zapisu.
Magistrala sterująca – służy do określenia typu operacji ma się wykonać (zapis
czy odczyt) oraz kierunku transferu danych (np. CPU do pamięci, pamięć do CPU)
RAM
Pamięć
operacyjna
Magistrala danych przesyła
dane z pamięci do CPU
w celu ich przetworzenia
Magistrala danych przesyła
przetworzone dane do pamięci w
celu ich późniejszego przetwarzania,
wyświetlenia, zapisania itp
Pamięć RAM zawiera dane
i rozkazy (programy)
określające jak przetwarzać dane
CPU
Jednostka
centralna
CPU
Przetwarza dane
07.03.2017
Procesor
• Procesor (processor) - urządzenie cyfrowe sekwencyjne potrafiące
pobierać, interpretować i wykonywać ciąg rozkazów. Wykonuje on
bardzo szybko dowolny ciąg prostych operacji wybranych ze zbioru
operacji podstawowych.
• Procesor składa się z:
– zespołu rejestrów do przechowywania danych i wyników,
– jednostki arytmetycznej (arytmometr) do wykonywania prostych
operacji na danych,
– układu sterującego przebiegiem obliczeń,
– rejestru rozkazów, czyli operacji podstawowych.
Procesor
Działania wykonywane przez procesor:
• działania arytmetyczne:
–
–
–
–
–
dodawanie,
odejmowanie,
porównywanie dwóch liczb,
dodawanie i odejmowanie jedności,
zmiana znaku liczby,
• działania logiczne:
–
–
–
–
iloczyn logiczny - AND,
suma logiczna - OR,
suma modulo2 (różnica symetryczna) - XOR,
negacja - NOT,
• przesunięcie bitów w lewo lub prawo,
• działania na bitach.
Algorytm
Przepis na rozwiązanie określonego problemu za
pomocą prostych czynności wykonywanych w ściśle
określonej kolejności.
Czynności:
1. muszą być znacznie prostsze od realizowanego algorytmu
2. muszą być wykonywalne dla danego „sprzętu”
(prostota czynności jest sprawą względną)
Kolejność:
1. określenie kolejności wykonywania czynności jest krytyczne dla
osiągnięcia celu algorytmu;
2. musi istnieć mechanizm rozgałęziania algorytmu,
tj. decydowania o kolejności w trakcie wykonywania algorytmu
na podstawie zaistniałych warunków.
Innymi słowy, czym jest algorytm ?
• Zbiór logicznie powiązanych kroków
prowadzących do określonego celu
• Sposób rozwiązania problemu
• "Przepis"
• Sposób opisu zachowania
Algorytm zawiera:
• Dane
• Instrukcje
07.03.2017
Rola algorytmu
Dane wejściowe
Algorytm
Dane wyjściowe
Algorytm “Przepis”
Ciasteczka czekoladowe
DANE (składniki)
2 1/4 szklanki mąki
1 łyżeczka soli
1 łyżeczki proszku do pieczenia
2 jajka
3/4 szklanki brązowego cukru 1 łyżeczki wanilii
3/4 szklanki cukru
1 paczka masła
30 dag startej na tarce czekolady
INSTRUKCJE (czynności)
Rozgrzać piekarnik do temperatury 375°C.
W misie zmieszać mąkę, sól, proszek do pieczenia.
Utrzeć razem cukier, masło i wanilię aż do uzyskania jednolitej
konsystencji.
Dodać jajka i utrzeć.
Dodać zmieszaną wcześniej mąkę, sól itd., utrzeć.
Dodać kawałki czekolady
Nałożyć łyżeczką niewielkie porcje ciasta na blachę przykrytą
do pieczenia.
Piec 8 do 10 minut.
Cechy dobrego algorytmu
Co jest złego w tym algorytmie?
Dobry algorytm musi być:
(Z etykiety szamponu)
• Skończony
• Kompletny
• Jednoznaczny
Sposób użycia:
• Poprawny
• Prosty
• Zawierać poziomy abstrakcji
papierem
•
•
•
•
•
Zmoczyć włosy
Nałożyć niewielką ilość szamponu na włosy
Wetrzeć
Spłukać
Czynności powtórzyć
07.03.2017
Sposoby opisu algorytmu
Algorytm: Średnie zużycie paliwa w l/km
• Język naturalny (np. angielski)
1. Pobierz wartości: zużyte paliwo w litrach,
początkowy i końcowy stan licznika w kilometrach
• Opis graficzny (np. sieć działań)
2. Ustaw wartość: przejechany dystans na wartość
(końcowy stan licznika - początkowy stan licznika)
• Pseudokod lub język programowania
3. Ustaw wartość: średnie zużycie paliwa na wartość
(zużyte paliwo / przejechany dystans)
4. Wydrukuj wartość: średnie zużycie paliwa
5. Koniec
Zapis algorytmu - sieć działań
Zwięzłość, czytelność i wysoki poziom abstrakcji
Sieć działań (schemat blokowy):
1.
Elementarne czynności oznaczone są blokami (węzły sieci), a kolejność
wyznaczona jest poprzez gałęzie sieci, łączące węzły.
2.
Kształt bloków odpowiada rodzajowi operacji, a strzałki gałęzi identyfikują
jednoznacznie ich kolejność.
3.
Niezależność struktury algorytmu od architektury konkretnej maszyny i
rodzaju kodowania liczb.
Za pomocą sieci działań możliwe jest zapisanie
każdego poprawnego algorytmu!
Sieć działań: Średnie zużycie paliwa w l/km
Start
zużyte paliwo
początkowy stan licz.
końcowy stan licz.
przejechany dystans  końcowy stan licz. - końcowy stan licz.
średnie zużycie paliwa na wartość  zużyte paliwo / przejechany dystans
drukuj średnie zużycie paliwa
Każdy algorytm można zapisać za pomocą wielu
różnych sieci działań!
Stop
07.03.2017
Przykład A
Przykład B
Znajdowanie największej z trzech liczb: max(a,b,c)
Start
Start
a,b,c
a,b,c
T
T
a>c
ma
N
a>b
N
T
m<b
c>b
drukuj c
T
mb
T
mc
N
N
m<c
drukuj a
Znajdowanie największej z
trzech liczb: max(a,b,c)
N
drukuj b
drukuj m
Stop
Stop
Sieci A vs B ?
max(a,b,c)
rozmiar:
1a
B
1. Pobierz wartości dla Litry (zużyte paliwo),
Start (początkowy stan licznika) i Koniec
(końcowy stan licznika)
2. Ustaw wartość dla Dystans (przejechany
PAMIĘĆ
dystans) na (Koniec - Start)
3. Ustaw wartość dla Sred (średnie zużycie
paliwa) na (Litry / Dystans)
4. Wydrukuj wartość: Sred
1c
Prześlij pobrane dane do pamięci
5. Stop
max(a,b,c)
rozmiar:
4 we/wy
3 dec.
0 op.
2 we/wy
2 dec.
3 op.
szybkość:
2 we/wy
2 dec.
0 op.
szybkość:
2 we/wy
2 dec.
1..3 op.
rozbudowa:
trudna
rozbudowa:
łatwa


Rozwiązanie problemu możliwe jest za pomocą różnych sieci działań.
Optymalizacja algorytmu polega na znalezieniu sieci najlepszej według
określonego kryterium: np. rozmiaru, szybkości, rozbudowy.
CPU
I/O
1b
Czekaj na dane wej.
• Rozkaz Pobierz pobiera dane z
zewnątrz i zapisuje je do pamięci
• Pobierz zmienia zawartość pamięci
• Zmienne algorytmu odnoszą się do
konkretnych miejsc w pamięci
Litry=36
Start=430
Koniec=940
PAMIĘĆ
A
Przykład. Wykonanie pseudokodu - krok 1
CPU
I/O
07.03.2017
Wykonanie pseudokodu: krok 2
Wykonanie pseudokodu: krok 3
Litry=39
Start=330
Koniec=980
2d
Prześlij wynik
do pamięci
I/O
CPU
2b
Pobierz wart.
do odejm.
2c: Oblicz różnicę
1. Pobierz wartości dla Litry (zużyte paliwo),
Start (początkowy stan licznika) i Koniec
(końcowy stan licznika)
2. Ustaw wartość dla Dystans (przejechany
dystans) na (Koniec - Start)
3. Ustaw wartość dla Sred (średnie zużycie
paliwa) na (Litry / Dystans)
4. Wydrukuj wartość: Sred
5. Stop
PAMIĘĆ
1. Pobierz wartości dla Litry (zużyte paliwo),
Start (początkowy stan licznika) i Koniec
(końcowy stan licznika)
2. Ustaw wartość dla Dystans (przejechany
dystans) na (Koniec - Start)
3. Ustaw wartość dla Sred (średnie zużycie
paliwa) na (Litry / Dystans)
4. Wydrukuj wartość: Sred
5. Stop
3a
PAMIĘĆ
2a
Litry=39
Start=330
Koniec=980
Dystans=650
3d
Prześlij wynik
do pamięci
I/O
CPU
3b
Pobierz wart.
do dziel.
3c: Oblicz iloraz
• Procesor pobiera dane z pamięci na
których operuje
Litry=39
Start=330
Koniec=980
Dystans=650
• Kolejna operacja Ustaw
I/O
CPU
• Analogiczne kroki
• Analogiczne operacje na pamięci
• Procesor przesyła wynik do pamięci
Wykonanie pseudokodu: krok 4
• Procesor wysyła żądanie wysłania
zawartości pamięci do urządzenia
wyjściowego
PAMIĘĆ
0.06
4b
Pobierz wartość
z pamięci
Litry=39
Start=330
Koniec=980
Dystans=650
Sred=0.06
PAMIĘĆ
• Wartość, która ma być wydrukowana
znajduje się w pamięci
I/O
CPU
CPU
I/O
Instrukcja procesora (kod programu) w pamięci
zapisane są w postaci liczb dwójkowych.
Zapis programu za pomocą liczb, które mogą być
bezpośrednio wykonywane przez maszyną nazywa
się językiem maszynowym.
Pamięć operacyjna
Litry=39
Start=330
Koniec=980
Dystans=650
Sred=0.06
CPU
Język maszynowy
Wyślij wartość na wyjście
4c
4a
1. Pobierz wartości dla Litry (zużyte paliwo),
Start (początkowy stan licznika) i Koniec
(końcowy stan licznika)
2. Ustaw wartość dla Dystans (przejechany
dystans) na (Koniec - Start)
3. Ustaw wartość dla Sred (średnie zużycie
paliwa) na (Litry / Dystans)
4. Wydrukuj wartość: Sred
5. Stop
Litry=39
Start=330
Koniec=980
Dystans=650
Sred=0.06
PAMIĘĆ
• Procesor wykonuje operacje
matematyczne
PAMIĘĆ
• Rozkaz Ustaw może zmienić zawartość
pamięci
np.
01001000
00001000
11001010
00001011
11111110
I/O
48h
08h
CAh
0Bh
FEh
..., 48, 08, CA, 0B, FE, ...
Pisanie programów w języku maszynowym przez
człowieka jest bardzo żmudne, ale było stosowane
do programowania komputerów I i II generacji.
07.03.2017
Język asemblera
Języki wysokiego poziomu
Każdej instrukcji procesora (która może zajmować jeden lub więcej bajtów)
można przypisać skrót literowy (mnemonik), a każdemu rejestrowi nazwę.
Zapis programu za pomocą mnemoników nazywa się językiem asemblera,
który jest znacznie łatwiejszy do opanowania przez człowieka.
np.
48h
08h
CAh
0Bh
FEh
...
MOV BL,8
ADD BL,B
INC
BL
...
MOV BL,8
ADD BL,B
INC BL
Asembler
• Abstrakcja danych – programista operuje na „zmiennych” bez konieczności
organizacji wykorzystania rejestrów procesora i lokalizacji liczb w pamięci
• Złożone struktury danych – proste jest deklarowanie i korzystanie ze
złożonych struktur liczb jak np. tablice (macierze), stosy, kolejki, drzewa, etc.
Program zapisany w języku asemblera nie może być wykonywany
bezpośrednio przez komputer i wymaga tłumaczenia na kod maszynowy
za pomocą programu zwanego asemblerem.
Ponieważ istnieje ścisły związek pomiędzy mnemonikami a instrukcjami
maszynowymi, proces tłumaczenia (asemblacja) jest stosunkowo prosty.
Proces odwrotny nazywa się deasemblacją (za pomocą disasemblera).
...
MOV BL,8
ADD BL,B
INC
BL
...
Program zapisany w języku wysokiego poziomu charakteryzuje:
..., 48, 08, CA, 0B, FE, ...
• Zaawansowane konstrukcje sterujące – określenie kolejności wykonywania
programu realizuje się z pomocą intuicyjnych konstrukcji warunkowych
typu IF-THEN-ELSE, FOR, DO-WHILE, etc.
• Dowolność układu zapisu programu – programista może zapisywać program
w postaci najbardziej dla niego czytelnej i zgodnej z upodobaniami.
...
for (i=1; i<10, i++) { n=10+x*2 };
...
Kompilacja programów
..., 48, 08, CA, 0B, FE, ...
...
MOV BL,8
ADD BL,B
INC
BL
...
 Kompilacja programów jest zadaniem bardzo złożonym, ze względu na
mnogość możliwości realizacji zadania w języku asemblera.
 Kompilatory są jednymi z najbardziej zaawansowanych i złożonych
programów dla komputerów osobistych.
X = X + Y*Z
MOV
MOV
MOV
MUL
ADD
MOV
AL,X
BL,Y
CL,Z
CL,BL
AL,CL
X,AL
lub
MOV
MOV
MUL
MOV
ADD
MOV
AL,Y
BL,Z
AL,BL
BL,X
AL,BL
X,AL
lub
MOV
MUL
ADD
MOV
AL,Z
AL,Y
CL,X
X,AL
• Znajdowanie największego wspólnego podzielnika
• Największy Wspólny Dzielnik (NWD) dwóch liczb jest największą
liczbą naturalną spośród tych, które dzielą obie te liczby bez
reszty
• Np. NWD(24,18) = 6.
Aby znaleźć Największy Wspólny Dzielnik dwóch liczb, to od
większej liczby należy odejmować mniejszą dotąd, aż obie liczby
będą sobie równe. Wynik jest ich największym wspólnym
podzielnikiem.
NWD(24,15)
Kompilator
...
for (i=1; i<10, i++)
{
n=10+x*2
};
...
Przykład - algorytm Euklidesa
Programy napisane w językach wysokiego poziomu muszą być tłumaczone
na język maszynowy za mocą programu zwanego kompilatorem,
a proces tłumaczenia nazywa się kompilacją.
...
for (i=1; i<10, i++)
{ n=10+x*2 };
...
...
for (i=1; i<10, i++)
{ n=10+x*2 };
...
24 - 15 = 9
Od większej liczby odejmujemy mniejszą. Liczby 24 i 15 przechodzą w 15 i 9.
Ponieważ nie są one równe, wykonujemy dalej odejmowanie
15 - 9 = 6
Teraz otrzymujemy parę 9 i 6, która dalej nie składa się z liczb sobie
równych, więc kontynuujemy odejmowanie.
9-6=3
Para 6 i 3 - odejmujemy dalej
6-3=3
Para 3 i 3 - otrzymaliśmy równość, więc liczba 3 jest największym wspólnym
podzielnikiem liczb 24 i 15.
07.03.2017
Przykład - algorytm Euklidesa
• Lista kroków
–
–
–
–
–
K01:
K02:
K03:
K04:
K05:
Czytaj a,b
Dopóki a ≠ b: wykonuj krok K03
Jeżeli a > b, to a ← a - b. Inaczej b ← b – a
nwd ← a
Zakończ algorytm
• Schemat blokowy
Algorytm Euklidesa – kod maszynowy i
asembler
b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 2b
c1 3b c8 75 f4 33 c0 c3
b9 18 00 00 00
b8 0f 00 00 00
3b c8
mov
mov
cmp
ecx, 24
eax, 15
ecx, eax
jle
sub
jmp
SHORT $L584
ecx, eax
SHORT $L585
sub
eax, ecx
cmp
jne
xor
ret
ecx, eax
SHORT $L591
eax, eax
0
$L591:
7e 04
2b c8
eb 02
$L584:
2b c1
$L585:
3b c8
75 f4
33 c0
c3
Algorytm Euklidesa – język Pascal
1
2
Od języka wysokiego poziomu do kodu
maszynowego
program Euclide;
var
m,n : integer;
begin
3
4
end.
ecx, 24
eax, 15
ecx, eax
jle
sub
jmp
SHORT $L584
ecx, eax
SHORT $L585
sub
eax, ecx
cmp
jne
xor
ret
ecx, eax
SHORT $L591
eax, eax
0
$L591:
readln(m);
readln(n);
while m <> n
if m > n then
m := m – n
else
n := n - m;
writeln(m);
mov
mov
cmp
$L584:
$L585:
b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 2b c1 3b c8 75
f4 33 c0 c3
07.03.2017
Algorytm Euklidesa – Język C i Ada
Język C
Język ADA
with Text_IO;
use Text_IO;
procedure Euklides is
a, b : Integer;
begin
a := 153;
b := 1326;
while (a /= b) loop
if (a > b) then
a := a - b;
else
b := b - a;
end if;
end loop;
int main(int argc, char* argv[])
{
int a,b;
printf("Podaj a.\n");
scanf("%d", &a);
printf("Podaj b.\n");
scanf("%d", &b);
while (a != b){
if (a > b)
a -= b;
else
b -= a;
}
printf("NWD to: %d", a);
return 0;
}
Historia języków programowania 1
Plankalkül
(1946, Niemcy)
A-O
(1951, USA)
AutoCode
(1952, Wlk.Brytania)
FORTRAN I
(1957, IBM, USA)
FORTRAN II
(1958, IBM, USA)
pierwszy na świecie język programowania
twórca Konrad Zues, komputer Z3
kmdr. Grace Hopper opracowuje kompilator A-O
znany także pod nazwą AT-3
studentka Alick Glennie opracowuje w ramach
studiów kompilator AutoCode dla komputera
Manchester Mark I
rozwinięcie kompilatora A-O; opublikowany pod
nazwą Math-Matic; programy numeryczno-modelujące
rozwinięcie FORTRAN-u I
wprowadzenie podprogramów
Put_Line("Największy wspólny dzielnik (NWD) to: "
& Integer'Image(b));
end;
Historia języków programowania 2
COBOL
(1959, USA)
LISP
(1959, USA)
Algol 60
(1960)
APL
(1961, USA)
FORTRAN IV
(1962, USA)
język dla przetwarzania dużych zespołów danych
w systemach ewidencyjno-zarządczych
(skrót: COmmon Business Oriented Language)
John McCarthy publikuje specyfikację LISP-u
(skrót: LISt Processing)
Historia języków programowania 3
Snobol
(1962, Bell Labs, USA)
BASIC
(1964, USA)
PL/I
międzynarodowy zespół publikuje specyfikację języka
Algol 60
(1964, IBM, USA)
Keneth Iversson publikuje specyfikację języka APL
ukierunkowanego na zagadnienia matematyczne
(1964, IBM, USA)
publikacja specyfikacji czwartej wersji języka
FORTRAN
RPG
LOGO
(1966, USA)
język programowania ukierunkowany na
przetwarzanie tekstów i wzorców językowych
John Kemeny i Thomas Kurtz opracowują język BASIC
(skrót: Beginners’ All-purpose Symbolic Instruction
Code)
publikacja specyfikacji języka PL/I przeznaczonego
do ogólnych zastosowań
publikacja specyfikacji języka RPG przeznaczonego do
raportowania baz danych
(skrót: Report Program Generator)
język wzorowany na LISP-ie, ukierunkowany na
nauczanie dzieci i osób poznających programowanie
07.03.2017
Historia języków programowania 4
Simula
(1967, Norwegia)
PASCAL
(1968, Szwajcaria)
BCPL
(1969, Wlk.Brytania)
Forth
(1970, USA)
Historia języków programowania 5
język wzorowany na Algolu 60; wprowadzenie pojęcia
klasy i obiektu; ukierunkowany na symulacje
(1970, XEROX, USA)
Niklaus Wirth opracowuje język PASCAL do nauki
programowania strukturalnego
(1970, USA)
język niskiego poziomu zawierający wyłącznie bardzo
proste typy danych (skrót: Basic Combined
Programming Language)
(1970, USA)
Smalltalk
Icon
B
C
Charles Moore opracowuje język wysokiego poziomu
Forth stosujący odwrotną notację polską
(1972, Bell Labs, USA)
język wysokiego poziomu stosowany w badaniach nad
sztuczną inteligencją
(skrót: PROgramming LOGic)
(1975, USA)
Tiny BASIC
PROLOG
(1970, Francja)
Historia języków programowania 6
BASIC
(1975, USA)
DSL
Bill Gates i Paul Allen opracowują własną wersję
BASIC-a, którą sprzedają dla firmy MITS produkującej
mikrokomputer Altair, w którym stosowany jest
mikroprocesor Intel 8080
język będący poprzednikiem PostScriptu
(1975, USA)
ADA
(1977, USA)
Modula
(1977, Szwajcaria)
Jean Ichbiahn wraz z zespołem opracowują język ADA
przyjęty później jako standardowy język
programowania Ministerstwa Obrony USA
Niklaus Wirth opracowuje język stosujący
modularyzację i współbieżność
pierwszy język całkowicie obiektowy
język programowania ukierunkowany na
przetwarzanie tekstów i wzorców językowych
język bazujący na BCPL opracowany dla komputera
PDP-11
Dennis Ritchie opracowuje język C (bazujący na
języku B) dla komputera PDP-11
dr Wong opracowuje miniaturową (tylko 2 KB pamięci)
wersję BASIC-a dla mikroprocesorów Intela i Ziloga;
jest to pierwszy program freeware; w programie
użyto zastrzeżeń: All Wrongs Reserved oraz Copyleft
Historia języków programowania 7
Modula-2
(1983, Szwajcaria)
C++
(1983, Bell Labs, USA)
Niklaus Wirth opracowuje ulepszoną wersję języka
Modula
zespół Bjarne Stroustrupa opracowuje język C++ na
bazie rozszerzonego języka C (C z klasami)
Perl
(1987)
udostępniona zostaje wersja 1.0 języka PERL
opracowanego przez Larry’ego Walla i Randala
Schwartza; (skrót: Practical Extract and Report
Language)
Java
zaprezentowano język programowania i środowisko
opracowywane od roku 1991 przez zespół Jamesa
Goslinga w Sun Microsystems
(1995, Sun, USA)
C#
(2000, Microsoft, USA)
Microsoft prezentuje język C# dla platformy .NET
będący kompilacją języków C++ i Java
07.03.2017
Dlaczego tak dużo języków
programowania ?
Rozwój języków programowania
• Ewolucja
• Osobiste preferencje
• Specjalne zastosowania
Obszary zastosowań
•
•
•
•
•
•
•
Aplikacje naukowe (Fortran, TCE)
Aplikacje biznesowe (Cobol)
Sztuczna inteligencja (Lisp)
Programowanie systemowe (C, C++)
Aplikacje sieciowe (Java, C#)
Języki bardzo wysokiego poziomu (perl)
Języki wysoce specjalizowane (make, sh)
Co czyni język popularnym ?
•
•
•
•
•
•
•
Efektywność kodu
Łatwość nauki
Łatwość implementacji
Open Source
Dostępność kompilatorów, bibliotek
Ekonomia, patronat, inercja
Składnia podobna do języka C
07.03.2017
Paradygmaty programowania
Złożoność obliczeniowa
Złożoność obliczeniowa – miara efektywności algorytmu
• Imperatywne (C, Pascal, etc.)
• Funkcjonalne (Lisp, ML, Haskell)
• Logiczne (Prolog)
• Zorientowane obiektowo (C++, Java, CLOS)
Podawana jako liczba operacji potrzebnych do wykonania algorytmu, wyrażona
w stosunku do liczby elementów zbioru (n), na którym działa dany algorytm.
Ponieważ dokładna liczba operacji zależy od konkretnych danych wejściowych,
złożoność obliczeniową podaje się dla najgorszego możliwego przypadku
Złożoność obliczeniową wyraża się za pomocą tzw. notacji O(•), która określa
dominującą tendencję zależności liczby operacji od n.
np. algorytm sortowania bąbelkowego zbioru n-elementowego:
liczba porównań
= 0.5(n2-n)
liczba przesunięć
= 0.75(n2-n)
złożoność obliczeniowa = O(n2)
np. 100n, 2n+4, 0.5n+n-1, 0.01n  O(n)
Złożoność... przykład
Sortowanie zbioru n=1,000,000
(słowniki, książki telefoniczne, bazy danych)
Proste metody sortowania O(n2) (wstawianie, wybieranie, bąbelkowe)
Sprzęt
1mln op/s
100,000 op/s
10,000 op/s
Czas
 6 dni
 2 miesiące
 2 lata
Zaawansowane metody sortowania O(n*log(n)) (Shell’a, przez podział, ... )
Sprzęt
1mln op/s
100,000 op/s
10,000 op/s
Czas
 12s
 2min
 20min
(op/s – dotyczy operacji na elementach sortowanego zbioru, które mogą być złożone, a nie
elementarnych operacji procesora.
Złożoność... przykład
Sortowanie zbioru n=1,000,000,000
(symulacje fizyczne, astronomiczne, biologiczne)
Proste metody sortowania O(n2) (wstawianie, wybieranie, bąbelkowe)
Sprzęt
1mln op/s
Czas
 160 lat
Zaawansowane metody sortowania O(n*log(n)) (Shell’a, przez podział, ... )
Sprzęt
1mln op/s
100,000 op/s
10,000 op/s
Czas
 0.5h
 4.5h
 2 dni
(op/s – dotyczy operacji na elementach sortowanego zbioru, które mogą być złożone, a nie
elementarnych operacji procesora.
07.03.2017
Przykład - Wieże Hanoi
Wieże Hanoi: Rozwiązanie
Stan początkowy
Ruch 2
A
B
Ruch 1
Ruch 3
C
Cel: Przenieść wszystkie krążki z jednego drążka na inny
– Zasada 1: Wolno przenosić tylko jeden krążek za każdym razem
– Zasada 2: Nie wolno położyć większego krążka na mniejszym
Wieże Hanoi - Złożoność
• Dla trzech pierścieni należy wykonać 7 operacji.
• W ogólnym przypadku: koszt wynosi 2N – 1 = O(2N)
• Przy każdym zwiększeniu N o jeden, nakłady pracy
zwiększają się dwukrotnie.
Ruch 4
Ruch 5
Ruch 6
Ruch 7
Wieże Hanoi (2N)
Dla N = 64
2N = 264 = 18,450,000,000,000,000,000
Dysponując komputerem mogącym wykonywać milion
instrukcji na sekundę…
• Wykonanie zajęłoby 584,000 lat !
• Przyrost pracy rośnie bardzo szybko!
Ale może być jeszcze gorzej…
07.03.2017
Złożoność rozsądna i nierozsądna
Algorytmy o rozsądnej złożoności
obliczeniowej mają złożoność najwyżej
wielomianową :
– O (Log N)
– O (N)
– O (NK) where K is a constant
O(•)
n log n
n2
n3
2n
n!
nn
dla porównania:
Algorytmy o nierozsądnej
złożoności obliczeniowej mają
złożoność wykładniczą i wyższą
 O (2N)
 O (N!)
 O (NN)
10
50
100
300
1000
33
100
1000
1024
3,6mld
10mld
282
2500
125000
16-cyfr
65-cyfr
85-cyfr
665
10,000
1,000,000
31-cyfr
161-cyfr
201-cyfr
2469
90,000
27mln
91-cyfr
9966
1,000,000
1mld (10-cyfr)





Algorytmy heurystyczne - heurystyka
• Heurystyka – od greckiego słowa heurisco – odkrywać znajdować
• Heurystyka – „twórcze rozwiązywanie problemów”, zarówno
logicznych, jak i matematycznych przez eksperyment, metodą
prób i błędów bądź odwołaniem się do analogii
• Zastosowanie wszędzie tam, gdzie rozwiązanie problemu wymaga
olbrzymiej ilości obliczeń.
• Dzięki heurystyce można wyeliminować pewne obszary
poszukiwanej przestrzeni, redukując koszty obliczeniowe i
przyspieszając znalezienie rozwiązania
liczba protonów we wszechświecie – 126-cyfr
liczba mikrosekund od powstania wszechświata – 24 cyfry
Heurystyka – idea - przykład
Heurystyka
Przypuśćmy, że komuś upadło szkło kontaktowe. Możliwości poszukiwań:
• Szukanie ślepe – schylanie się i szukanie po omacku, nie
gwarantuje pozytywnego rezultatu
• Szukanie systematyczne – polega na rozszerzaniu przeszukiwanej
przestrzeni w sposób metodyczny i zorganizowany. Zawsze
gwarantuje sukces, ale jest bardzo czasochłonne
• Szukanie analityczne – wymaga rozwiązania równania
matematycznego rządzącego upadkiem szkła z uwzględnieniem
oporu powietrza, siły wiatru, ciążenia. Gwarantuje sukces, ale jest
niepraktyczne.
• Szukanie leniwe – polega na znalezieniu najbliższego optyka i
zakupie nowego szkła
• Szukanie heurystyczne – określamy przybliżony kierunek upadku i
domyślamy się , na jaką odległość może upaść szkło, a następnie
przeszukujemy wybrany obszar
• Przeszukiwanie ślepe i heurystyczne jest w penym stopniu do
siebie podobne, ale:
• o szukaniu ślepym mówi się wtedy, gdy nie są wykorzystywane
informacje o dziedzinie rozwiązywanego problemu
• w poszukiwaniu heurystycznym korzysta się z dodatkowych
informacji o przestrzeni stanów, a ponadto jest się w stanie ocenić
postępy poprawiające efektywność działania
Pokonanie mistrza świata w szachach przez komputer stało się
możliwe dzięki technikom heurystycznym, które pozwoliły wykluczyć
warianty nie rokujące sukcesu.
07.03.2017
Systemy sztucznej inteligencji
• Wykorzystują heurystykę w celu realizacji celu.
• Inteligencja - cecha umysłu odpowiadajaąca za sprawność
myślenia i innych czynności poznawczych, umożliwiajaąca
jednostce korzystanie z nabytej wiedzy oraz skuteczne zachowanie
się wobec nowych zadań i sytuacji.
— Encyklopedia Powszechna PWN
• Inteligencja - umiejętność wnioskowania, rozumowania,
kojarzenia faktów.
— Słownik jęz. ang. Webster
Systemy sztucznej inteligencji
AI – Artificial Intelligence
AI jest nauką podejmującą próbę stworzenia urządzeń cechujących się
INTELIGENCJĄ
W świetle definicji inteligencji, nie wiadomo konkretnie jakich urządzeń ...
Można założyć´ — takich jak my (bądź sprytniejszych od nas)
• Systemy AI to systemy, które „zachowują się” jak ludzie.
(Test Turinga)
• Systemy AI to systemy, których budowa i działanie jest oparta o
działanie mózgu.
(Sieci Neuronowe)
• Systemy AI to systemy, których działanie oparte jest o racjonalne
zasady.
(poprawne wnioskowanie)
• Systemy AI to systemy, które w działaniu wykazują znamiona
racjonalności.
(poprawne wnioskowanie + optymalne decyzje)
Systemy sztucznej inteligencji
•
•
•
•
•
•
•
Systemy ekspertowe
Sieci neuronowe
Systemy ewolucyjne (algorytmy genetyczne)
Technologie oparte na logice rozmytej
Algorytmy mrówkowe
Teoria gier
inne
Download