PORZĄDEK WŚRÓD INFORMACJI KLUCZEM DO SZYBKIEGO WYSZUKIWANIA Maciej M. Sysło Uniwersytet Wrocławski Uniwersytet UMK w Toruniu [email protected] informatyka + Algorytm, algorytmika Algorytm – opis rozwiązania krok po kroku.

Download Report

Transcript PORZĄDEK WŚRÓD INFORMACJI KLUCZEM DO SZYBKIEGO WYSZUKIWANIA Maciej M. Sysło Uniwersytet Wrocławski Uniwersytet UMK w Toruniu [email protected] informatyka + Algorytm, algorytmika Algorytm – opis rozwiązania krok po kroku.

PORZĄDEK WŚRÓD INFORMACJI
KLUCZEM DO SZYBKIEGO WYSZUKIWANIA
Maciej M. Sysło
Uniwersytet Wrocławski
Uniwersytet UMK w Toruniu
[email protected]
informatyka +
2
Algorytm, algorytmika
Algorytm – opis rozwiązania krok po kroku postawionego
problemu lub sposobu osiągnięcia jakiegoś celu
Pierwszy algorytm – algorytm Euklidesa
300 p.n.e
algorytm od Muhammad
ibn Musa al-Chorezmi IX w.
Algorytmika – dziedzina zajmująca się algorytmami i ich
własnościami
informatyka +
3
Algorytmy a informatyka
Informatyka – jedna z definicji: dziedzina wiedzy i działalności
zajmująca się algorytmami
Czy zajmuje się też algorytmami kulinarnymi?
Donald E. Knuth:
Mówi się często, że człowiek dotąd nie zrozumie czegoś,
zanim nie nauczy tego – kogoś innego.
W rzeczywistości,
człowiek nie zrozumie czegoś (algorytmu) naprawdę,
zanim nie zdoła nauczyć tego – komputera.
Ralf Gomory (IBM):
Najlepszym sposobem przyspieszania komputerów
jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami)
informatyka +
4
Myślenie algorytmiczne
Myślenie komputacyjne
(ang. computational thinking)
Reklama firmy IBM
z 1924 roku
Komputer to maszyna
do myślenia !!!
informatyka +
5
IBM
informatyka +
6
Problemy, algorytmy
i ich komputerowe realizacje (implementacje)
Plan:
• Poszukiwanie informacji:
• w zbiorze nieuporządkowanym
• w zbiorze uporządkowanym
• Przeszukiwanie zbioru: schemat blokowy, algorytm optymalny
• Kompletowanie podium zwycięzców turnieju
• Jednoczesne znajdowanie najmniejszego i największego
elementu
• zasada dziel i zwyciężaj
• Porządkowanie: przez wybór, przez zliczanie, przez scalanie
• Inne zastosowania zasady dziel i zwyciężaj
informatyka +
7
Poszukiwanie elementu w zbiorze
Problem poszukiwania elementu w zbiorze – specyfikacja
Dane: Zbiór elementów w postaci ciągu n liczb x1, x2, ..., xn.
Wyróżniony element y
Wynik: Jeśli y należy do tego zbioru, to podaj jego miejsce (indeks) w
ciągu, a w przeciwnym razie – sygnalizuj brak takiego
elementu w zbiorze – wstaw y do ciągu
Dwa przypadki:
• Nieuporządkowany ciąg liczb x1, x2, ..., xn
• Uporządkowany ciąg liczb x1, x2, ..., xn
Nasz cel:
Jakie są korzyści z uporządkowania?
Jak utrzymywać porządek wśród informacji?
informatyka +
8
Poszukiwanie elementu w zbiorze – przykład
Przeszukiwanie książki telefonicznej
Poszukiwanie numeru telefonu danej osoby
Dane: Nazwiska, adresy, numery telefonów … – książka telefoniczna.
Ciąg danych x1, x2, ..., xn – kartki książki z danymi o numerach
Wyróżniony element y – nazwisko osoby, której numeru szukamy
Wynik: Jeśli osoba y ma numer telefony w książce, to podaj na której
stronie, a w przeciwnym razie – sygnalizuj brak danych o y
Poszukiwanie osoby o danym numerze telefonu
Dane: Książka telefoniczna.
Ciąg danych x1, x2, ..., xn – kartki książki z danymi o numerach
Wyróżniony element y – numer telefonu osoby, której szukamy
Wynik: Jeśli istnieje osoba z numerem telefonu y, to podaj jej nazwisko,
a w przeciwnym razie – sygnalizuj brak takiej osoby
informatyka +
9
Poszukiwania w zbiorze nieuporządkowanym
Algorytm – Poszukiwanie liniowe
Krok 1. Dla i = 1, 2, ..., n, jeśli xi = y, to przejdź do kroku 3.
Krok 2. Komunikat: W ciągu danych nie ma elementu równego y.
Zakończ algorytm: – wynik: –1
Krok 3. Element równy y znajduje się na miejscu i w ciągu danych.
Zakończ algorytm: wynik: i
Przykład:
Dane: ciąg: 2, 5, 1, 4, 10, 7. y = 1
Wynik: i = 3
Pewna niedogodność
– sprawdzanie, czy
koniec ciągu.
begin
i:=1;
while (x[i]<>y) and (i<n) do i:=i+1;
if x[i]=y then PrzeszukiwanieLiniowe:=i
else PrzeszukiwanieLiniowe:=-1
end
informatyka +
10
Poszukiwania w zbiorze nieuporządkowanym
z wartownikiem
Algorytm – Poszukiwanie liniowe z wartownikiem
Takie same kroki algorytmu inna implementacja, czyli komputerowa
realizacja:
na końcu ciągu:
x1 x2 x3 x4 … xn xn+1
wstawiamy wartownika
– pilnuje końca ciągu
begin
i:=1;
Nie ma sprawdzania,
x[n+1]:=y;
czy koniec ciągu
while x[i]<>y do i:=i+1;
if i<=n then PrzeszukiwanieLinioweWartownik:=i
else PrzeszukiwanieLinioweWartownik:=-1
end
informatyka +
11
Poszukiwanie w zbiorze uporządkowanym
Zabawa w zgadywanie liczby
Zgadywana liczba:
Metoda:
Kolejne kroki:
17 w przedziale [1 : 20]
połowienia przedziału
strzałka wskazuje wybór;
kolor czerwony – ciąg do przeszukania:
informatyka +
12
Poszukiwanie przez połowienie
w ciągu uporządkowanym
function PrzeszukiwanieBinarne(x:tablicax; k,l:integer;
y:integer):integer;
{Przeszukiwanie binarne ciagu x[k..l] w poszukiwaniu
elementu y.}
var Lewy,Prawy,Srodek:integer;
Początkowe końce przedziału
begin
Lewy:=k; Prawy:=l;
while Lewy<=Prawy do begin
Połowienie przedziału
Srodek:=(Lewy+Prawy) div 2;
if x[Srodek]=y then begin
y należy do przedziału
PrzeszukiwanieBinarne:=Srodek; exit
end; {element y nalezy do przeszukiwanego ciagu}
if x[Srodek]<y then Lewy:=Srodek+1
else Prawy:=Srodek-1
Zmiana końców przedziału
end;
PrzeszukiwanieBinarne:=-1
y nie należy do
end
przeszukiwanego przedziału
informatyka +
13
Umieszczanie przez połowienie
w ciągu uporządkowanym
Dane: Uporządkowany ciąg liczb w tablicy x[k..l] oraz
element y
Wynik: Miejsce dla y w ciągu x[k..l] takie, aby po
wstawieniu y ciąg nadal był uporządkowany
Algorytm: y wstawiamy do przeszukiwanego ciągu w to miejsce,
gdzie algorytm poszukiwania kończy działanie, a więc tam,
gdzie jest y (jeśli y jest już w ciągu), albo gdzie powinien być.
informatyka +
14
Poszukiwanie przez połowienie
Złożoność (1)
Liczba kroków w algorytmie połowienia:
Ile razy należy przepołowić ciąg o danej długości, aby znaleźć
element lub miejsce dla niego?
Przykład dla n = 1200
Kolejne długości ciągu:
1200, 600, 300, 150, 75, 38, 19, 10, 5, 3, 2, 1
11 razy dzielono ciąg o długości 1200, by pozostał 1 element
Liczba porównań w algorytmach poszukiwania dla n = 1200:
• przez połowienie
• liniowy
11
1200
informatyka +
Porównaj, jaka jest potęga
uporządkowania !!!
15
Poszukiwanie przez połowienie
złożoność (2)
Dla n = 1200 liczba porównań w algorytmie połowienia wyniosła 11
Pytania:
• Jak liczba porównań zależy od n?
• Jak dobry jest to algorytm?
Liczba porównań dla różnych n:
n
100
1 000
10 000
100 000
1 000 000
10 000 000
liczba porównań
7
10
14
17
20
24
Algorytm poszukiwania przez
połowienie jest optymalny,
czyli najszybciej przeszukuje
zbiory uporządkowane.
Funkcja logarytm, bardzo
ważna w algorytmice
logarytm
to anagram od
algorytm
ok.log2 n
informatyka +
16
Poszukiwanie interpolacyjne
function PrzeszukiwanieBinarne(x:tablicax; k,l:integer;
y:integer):integer;
{Przeszukiwanie binarne ciagu x[k..l] w poszukiwaniu
elementu y.}
var Lewy,Prawy,Srodek:integer;
Srodek = lewy + (prawy – lewy)/2
begin
Lewy:=k; Prawy:=l;
Srodek = lewy +
while Lewy<=Prawy do begin
(y – x[lewy])(prawy – lewy)/(x[prawy] – x[lewy])
Srodek:=(Lewy+Prawy) div 2;
if x[Srodek]=y then begin
PrzeszukiwanieBinarne:=Srodek; exit
end; {element y nalezy do przeszukiwanego ciagu}
if x[Srodek]<y then Lewy:=Srodek+1
else Prawy:=Srodek-1
end;
PrzeszukiwanieBinarne:=-1
Przeciętny czas interpolacyjnego
end
umieszczania wynosi ok. log log n
informatyka +
17
Suwaki logarytmiczne
Na wyposażeniu
każdego inżyniera
do 1972 roku
Skala 30 cm
Skala 150 cm
Skala 12 m
informatyka +
18
18
Znajdowanie elementu w zbiorze
Znajdź w zbiorze element o pewnych własnościach:
• najwyższego ucznia w swojej klasie – metoda spaghetti
• jak zmieni się Twój algorytm, jeśli chciałbyś znaleźć w klasie
najniższego ucznia
• znajdź w swojej klasie ucznia, któremu droga do szkoły zabiera
najwięcej czasu
• znajdź najstarszego (lub najmłodszego) ucznia w swojej szkole
• znajdź największą kartę w potasowanej talii kart
• znajdź najlepszego tenisistę w swojej klasie – nie ma remisów
• znajdź najlepszego gracza w warcaby w swojej klasie – możliwe
są remisy
Podstawowa operacja – porównanie:
• dwóch liczb lub kombinacji liczb (data, karty):
• dwóch zawodników:
informatyka +
czy x < y ?
rozegranie meczu
19
Znajdowanie elementu w zbiorze
Różnica między dwoma problemami:
Czy zbiór zawiera y?
Dane: Ciąg n liczb x1, x2, ..., xn
Wyróżniony element y
Wynik: Czy w ciągu jest
element y ?
Znajdź w zbiorze element o
pewnych własnościach
Dane: Ciąg n liczb x1, x2, ..., xn
Wynik: Najmniejsza wśród liczb
x1, x2, ..., xn
Przeszukujemy ciąg aż
znajdziemy y, Przeglądamy
cały ciąg, by stwierdzić, że nie
zawiera y.
Trzeba przejrzeć cały ciąg.
Zakładamy, że ciąg nie jest
uporządkowany.
Uporządkowanie ciągu ułatwia.
informatyka +
20
Specyfikacja problemu
Specyfikacja problemu – dokładne opisanie problemu
Problem Min – Znajdowanie najmniejszego elementu w zbiorze
Dane: Liczba naturalna n i zbiór n liczb dany w ciągu x1, x2, ..., xn
Wynik: Najmniejsza wśród liczb x1, x2, ..., xn – oznaczmy ją min
Metoda rozwiązania: przeszukiwanie liniowe – od lewej do prawej
Algorytm Min – Znajdowanie najmniejszego elementu w zbiorze
Krok 1. Przyjmij za min pierwszy element w zbiorze (w ciągu),
imin := 1
czyli przypisz min := x1.
Krok 2. Dla kolejnych elementów xi, gdzie i = 2, 3, ..., n,
imin := i
jeśli min > xi, to przypisz min := xi.
Algorytm Max – prosta modyfikacja: zamiana > na <
Wyznaczanie imin – indeksu elementu o wartości min
informatyka +
21
Algorytm Min – demo
Demonstracja przeszukiwania od lewej do prawej:
informatyka +
22
(Zgrubny) schemat blokowy algorytmu Min
Krok 1:
Krok 2:
Instrukcje warunkowe:
rozgałęzienia algorytmu
min ← pierwszy element
ze zbioru A
Czy porównano wszystkie
elementy ze zbioru A ?
Tak
Koniec
algorytmu
Instrukcja iteracyjna
Nie
x ← kolejny element
ze zbioru A
Nie
min > x ?
Tak
min ← x
Ada Augusta, córka Byrona, uznawana
powszechnie za pierwszą programistkę
komputerów, przełomowe znaczenie
maszyny analitycznej Ch. Babbage’a,
pierwowzoru dzisiejszych komputerów,
upatrywała właśnie „w możliwości
wielokrotnego wykonywania przez nią
danego ciągu instrukcji, z liczbą powtórzeń
z góry zadaną lub zależną od wyników
obliczeń”, a więc w iteracji.
informatyka +
23
Pełny
schemat
blokowy
algorytmu
Min
informatyka +
24
Algorytm Min w postaci programu
Program w języku Pascal
program Min;
var i,imin,min,n,x:integer;
begin
read(n);
read(x); min:=x; imin:=1;
for i:=2 to n do begin
read(x);
if min > x then begin
min:=x; imin:=i
end
end;
write(imin,min)
end.
informatyka +
nazwa programu
deklaracje, typy zmiennych
blok programu – początek
czytaj n
czytaj pierwszy element
iteracja od 2 do n
czytaj kolejny element
instrukcja warunkowa
popraw min
instrukcja war. – koniec
iteracja – koniec
pisz wynik
blok programu – koniec
25
Pracochłonność algorytmu Min
• Porównanie – podstawowa operacja w algorytmie Min.
• Pracochłonność (złożoność obliczeniowa) algorytmu –
liczba podstawowych operacji wykonywanych przez
algorytm.
• Pytanie: Ile porównań wykonuje algorytm Min?
• Odpowiedź: o jedno mniej niż jest elementów, czyli n – 1
Pytania:
• Czy można szybciej?
• Czy istnieje szybszy algorytm znajdowania min?
• A może metoda pucharowa wyłaniania zwycięzcy w turnieju jest
szybsza?
informatyka +
26
Wyłanianie najlepszego zawodnika w turnieju
czyli inny sposób znajdowania max (lub min)
Porównania – mecze
Ośmiu zawodników: 7 meczy
n zawodników: n – 1 meczy
a więc nie jest szybsza
Tomek
Tomek
Bartek
Bartek
Bartek
Romek
Jednak jest szybciej.
Gdy liczmy równolegle
Witek
Bolek
Witek
Tomek
Tomek
Zenek
informatyka +
Tolek
Tolek
Felek
27
A może mamy algorytm najlepszy?
Podsumowanie:
Mamy dwa algorytmy znajdowania min lub max:
• przeszukiwanie liniowe
• rozegranie turnieju
które na zbiorze n elementów wykonują n – 1 porównań
Może nie ma szybszego algorytmu?
TAK!
Hugo Steinhaus tak to uzasadnił:
Jeśli Tomek jest zwycięzcą turnieju, w którym startuje n zawodników,
to każdy inny spośród n – 1 zawodników musiał przegrać
przynajmniej raz, a zatem rozegrano przynajmniej n – 1 meczy.
Zatem każdy algorytm musi wykonać przynajmniej n – 1 porównań,
czyli nasze algorytmy są najszybsze – są optymalne.
informatyka +
28
A jak znaleźć drugiego najlepszego
zawodnika w turnieju?
Tomek
Ale Bartek nie grał
z drugą połową!
Czy jest nim Bartek?
Bo przegrał z Tomkiem?
Tomek
???
Bartek
Bartek
Bartek
Romek
Witek
Bolek
Witek
???
Tomek
Tomek
Zenek
informatyka +
Tylko dwa
dodatkowe mecze!
Tolek
Tolek
Felek
29
Jednoczesne znajdowanie min i max
Obserwacja:
jeśli x  y, to x kandydatem na min, a y kandydatem na max
Algorytm „dziel i zwyciężaj”:
Krok 1. Podział na kandydatów na min i kandydatów na max
Kandydaci na max
Porównania parami
Kandydaci na min
3
2
5
8
5
↑
↑
↑
↑
↑
3 ? 1
2 ? 2
5 ? 3
4 ? 8
2 ? 5
↓
↓
↓
↓
↓
1
2
3
4
2
max = 8
min = 1
Krok 2. Znajdź min i max
Liczba porównań:
• algorytm naiwny: n – 1 (min) + n – 2 (max) = 2n – 3
• algorytm dziel i zwyciężaj: n/2(podział)+ (n/2–1)(min) + (n/2–1)(max)
ok. 3n/2 – 2
– jest to algorytm optymalny
informatyka +
30
Problem porządkowania (sortowania)
Problem porządkowania (sortowania)
Dane: Liczba naturalna n i ciąg n liczb x1, x2, ..., xn
Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do
największej
Algorytm: porządkowanie przez wybór – Selection Sort
Idea: najmniejszy wśród nieuporządkowanych daj na początek
Krok 1. Dla i = 1, 2, ..., n – 1 wykonaj kroki 2 i 3, a następnie
zakończ algorytm
Krok 2. Znajdź k takie, że xk jest najmniejszym elementem w ciągu
xi, ..., xn
Krok 3. Zamień miejscami elementy xi oraz xk
informatyka +
31
Znajdowanie elementu w zbiorze
Podsumowanie
Różnica między dwoma problemami:
Czy zbiór zawiera y?
Dane: Ciąg n liczb x1, x2, ..., xn
Wyróżniony element y
Wynik: Czy w ciągu jest
element y ?
Znajdź w zbiorze element o
pewnych własnościach
Dane: Ciąg n liczb x1, x2, ..., xn
Wynik: Najmniejsza wśród liczb
x1, x2, ..., xn
Przeszukujemy ciąg aż
znajdziemy y, Przeglądamy
cały ciąg, by stwierdzić, że nie
zawiera y.
Trzeba przejrzeć cały ciąg.
Zakładamy, że ciąg nie jest
uporządkowany.
Uporządkowanie ciągu ułatwia.
informatyka +
32
Porządkowanie przez wybór – demo (1)
Żółte – podciąg
już uporządkowany
Zielone i czerwone –
podciąg porządkowany
informatyka +
33
Porządkowanie przez wybór – demo (2)
Podciąg już
uporządkowany
Podciąg porządkowany
informatyka +
34
Złożoność porządkowania przez wybór
Liczba zamian elementów w kolejnych krokach:
1+1+1+…+1=n–1
Liczba porównań w kolejnych krokach:
(n – 1) + (n – 2) + (n – 3) + … + 3 + 2 + 1 = ?
Przykład
n=6
Pole prostokąta: 5 x 6
Suma = pole czarnych diamentów:
5






5x6
4






2
3






2






1





5=n–1

Ogólnie suma:
(n – 1) x n
2
Liczby trójkątne
6=n
informatyka +
35
Porządkowanie przez zliczanie
Problem porządkowania niewielkich liczb
Dane: Liczba naturalna n i ciąg n liczb całkowitych x1, x2, ..., xn,
należących do przedziału [1..M] – na ogół n < M.
Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do największej
Algorytm. Porządkowanie przez zliczanie – CountingSort
Idea: Liczymy, ile jest konkretnych liczb w ciągu
Krok 1. Dla i = 1, 2, ..., M: ci = 0 zerowanie liczników.
Krok 2. Dla i = 1, 2, ..., n: zwiększ ck o 1, gdzie k = xi.
Krok 3. Dla i = 1, 2, ..., M: na kolejnych ci pozycjach w ciągu x umieść
element i.
Liczba operacji – proporcjonalna do n + M.
informatyka +
36
Sortowanie przez scalanie – scalanie
Scalanie – z dwóch uporządkowanych ciągów utwórz jeden
uporządkowany
Algorytm scalania. Scal.
Dane: dwa ciągi uporządkowane
Wynik: scalony ciąg uporządkowany
Krok: do tworzonego ciągu pobieraj najmniejszy element z
czoła scalanych ciągów
Scalane ciągi
Scalanie
1
1
Scalony ciąg
35
2
7
6
10 12
9 11 15 17 20
1 3 5 7 10 12
1 2 6 9 11 15 17 20
1 1 2 3 5 6 7 9 10 11 12 15 17 20
informatyka +
37
Sortowanie przez scalanie – scalanie
Scalane ciągi
Scalone ciągi, w
innym miejscu
informatyka +
38
Sortowanie przez scalanie – opis
Metoda dziel i zwyciężaj
Rekurencyjne
wywołania na
podciągach
Algorytm porządkowania przez scalanie MergeSort(l,p,x)
Dane: Ciąg liczb xl, xl+1, …, xp
Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do
największej.
Krok 1. Jeśli l < p, to przyjmij s:=(l+p) div 2 i wykonaj trzy
następne kroki. { s w połowie ciągu}
Krok 2. MergeSort(l,s,x) – sortowanie pierwszej połowy ciągu
Krok 3. MergeSort(s+1,p,x) – sortowanie drugiej połowy ciągu
Krok 4. Zastosuj algorytm Scal do ciągów (xl, …, xs) i (xs+1, …, xp)
i wynik umieść w ciągu (xl, …, xp).
informatyka +
39
Sortowanie przez scalanie
DEMO
212950
dziel
2 1 2
950
dziel
dziel
2 1
9 5
2
dziel
dziel
1
2
0
5
9
scal
scal
1 2
5 9
scal
1 2 2
scal
0 5 9
scal
0 1 2 2 5 9
informatyka +
40
Sortowanie przez scalanie
DEMO
Posortowana jest już
pierwsza połowa ciągu i
w trakcie sortowania
drugiej połowy, scalane
są dwa podciągi z
pierwszej części drugiej
połowy, uporządkowane
wcześniej rekurencyjnie
tą samą metodą
Posortowana
pierwsza
połowa ciągu
Scalane ciągi
Wynik scalania
dodatkowym miejscu
informatyka +
41
Potęga algorytmu binarnego (dziel i zwyciężaj)
Kryptografia: Szyfr RSA, jeden z najpopularniejszych obecnie, bazuje
na podnoszeniu do dużej potęgi dużych liczb, np.
1234567890987654321234567890987654321123456789987654321
123456789012345678909876543211234567890987654321123456789098765432123456789101
234567891012345678910123456789123456789123456789123456789
Jak można szybko obliczać takie potęgi? Odpowiedź:
Np., obliczenie x
12345678912345678912345678912345
10
• Ze szkolnej definicji: x
Szybkość
superkomputera
wymaga:
= x*x*x*x*x*x*x*x*x*x – 9 mnożeń, wtedy:
12345678912345678912345678912344/1015 sek. = 4*108 lat
• Algorytm „binarny”, np.:
Wykonuje dla x
x10 = (x5)2 , x11 = (x5)2*x
12345678912345678912345678912345
ok. …200 mnożeń < 1 sek.
informatyka +
42
Konkluzja
Najlepszym sposobem przyspieszania komputerów
jest obarczanie ich mniejszą liczbą działań
(szybszymi algorytmami)
[Ralf Gomory, IBM]
43
43
Algorytm, algorytmika
Algorytm – opis rozwiązania krok po kroku postawionego
problemu lub sposobu osiągnięcia jakiegoś celu
Pierwszy algorytm – algorytm Euklidesa
300 p.n.e
algorytm od Muhammad
ibn Musa al-Chorezmi IX w.
Algorytmika – dziedzina zajmująca się algorytmami i ich
własnościami
informatyka +
44
Algorytmy a informatyka
Informatyka – jedna z definicji: dziedzina wiedzy i działalności
zajmująca się algorytmami
Czy zajmuje się też algorytmami kulinarnymi?
Donald E. Knuth:
Mówi się często, że człowiek dotąd nie zrozumie czegoś,
zanim nie nauczy tego – kogoś innego.
W rzeczywistości,
człowiek nie zrozumie czegoś (algorytmu) naprawdę,
zanim nie zdoła nauczyć tego – komputera.
Ralf Gomory (IBM):
Najlepszym sposobem przyspieszania komputerów
jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami)
informatyka +
45
Algorytmiczne rozwiązywanie problemu
Dla problemu – chcemy otrzymać rozwiązanie
komputerowe, które jest:
• zrozumiałe dla każdego, kto zna problemu
• poprawne, czyli spełnia specyfikację (opis) problemu
• efektywne, czyli nie marnuje czasu i pamięci
Metoda rozwiązywania:
• analiza sytuacji problemowej
• sporządzenie specyfikacji: wykaz danych, wyników i relacji
• projekt rozwiązania
• komputerowa realizacja rozwiązania – implementacja
• testowanie poprawności rozwiązania
• dokumentacja i prezentacja rozwiązania
informatyka +
46
Rozwiązywanie problemów z pomocą
komputerów
Objaśnienie dwóch terminów:
Problem:
• problem, gdy nie podano nam, jak należy go rozwiązać, ale wiemy
wystarczająco, by poradzić sobie z nim
• a więc, problem jest dla każdego nie tylko dla orłów
Programowanie:
• komputery wykonują tylko programy
• cokolwiek uruchamiamy na komputerze: Google, dokument w Word,
arkusz w Excel, naciśnięcie klawisza – jest programem
• każdy widoczny i niewidoczny efekt działania komputera to wynik
działania jakiegoś programu
Konkluzja: powinniśmy lepiej poznać programowanie komputerów
informatyka +
47
Pokrewne zajęcia w Projekcie Informatyka +
Wykład+Warsztaty (Wszechnica Poranna):
• Wprowadzenie do algorytmiki i programowania – wyszukiwanie i
porządkowanie informacji
• Proste rachunki wykonywane za pomocą komputera.
• Techniki algorytmiczne – przybliżone (heurystyczne) i dokładne.
Wykłady (Wszechnica Popołudniowa):
• Czy wszystko można policzyć na komputerze?
• Porządek wśród informacji kluczem do szybkiego wyszukiwania.
• Dlaczego możemy się czuć bezpieczni w sieci, czyli o szyfrowaniu
informacji.
• Znajdowanie najkrótszych dróg, najniższych drzew, najlepszych
małżeństw
informatyka +
48
Pokrewne zajęcia w Projekcie Informatyka +
Kursy (24 godz.) – Wszechnica na Kołach:
• Algorytmy poszukiwania i porządkowania. Elementy języka
programowania
• Różnorodne algorytmy obliczeń i ich komputerowe realizacje
• Grafy, algorytmy grafowe i ich komputerowe realizacje
Kursy (24 godz.) – Kuźnia Informatycznych Talentów – KIT dla Orłów:
• Przegląd podstawowych algorytmów
• Struktury danych i ich wykorzystanie
• Zaawansowane algorytmy
Tendencje – Wykłady
• Algorytmy w Internecie, K. Diks
• Czy P = NP, czyli jak wygrać milion dolarów w Sudoku, J. Grytczuk
• Między przeszłością a przyszłość informatyki, M.M Sysło
informatyka +
49