Transcript min
Slide 1
Slide 2
ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA
ELEMENTY JĘZYKA PROGRAMOWANIA
Maciej M. Sysło
Uniwersytet Wrocławski
Uniwersytet UMK w Toruniu
[email protected]
informatyka +
2
Slide 3
Algorytm, algorytmika
Na str. 3-7 są zamieszczone uwagi
wstępne na temat algorytmiki.
Można je pominąć i wrócić później.
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
Slide 4
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
Slide 5
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 +
5
Slide 6
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 +
6
Slide 7
Myślenie algorytmiczne
Myślenie komputacyjne
(ang. computational thinking)
Reklama firmy IBM
z 1924 roku
Komputer to maszyna
do myślenia !!!
informatyka +
7
Slide 8
Poszukiwanie, porządkowanie,
elementy programowania
PLAN
• Rozgrzewka (warm-up) – kilka krótkich programów
• Przeszukiwanie zbioru – Min i Max: schematy blokowe,
pierwsze programy, złożoność algorytmu,
• Kompletowanie podium zwycięzców turnieju
• Jednoczesne znajdowanie najmniejszego i największego
elementu
• Porządkowanie przez wybór – iteracja algorytmu
• Porządkowanie przez zliczanie
• Poszukiwanie informacji w zbiorach nieuporządkowanych
i uporządkowanych
• Dziel i zwyciężaj, rekurencja: sortowanie przez scalanie i
sortowanie szybkie
informatyka +
8
Slide 9
Rozgrzewka przy komputerach
Rozgrzewka (warm-up) – kilka krótkich programów:
• obliczanie pole trójkąta
• dodatkowo sprawdzanie, czy dane są dobre – warunek
• obliczanie pola trójkąta dla ciągu danych – iteracja i tablice
Ciekawe zadanie dotyczące trójkątów:
Dane:
ciąg (bardzo długi) liczb
Odpowiedź: czy z każdej trójki liczb z tego ciągu można
zbudować trójkąt?
Wskazówka: istnieje rozwiązanie, w którym nie trzeba
sprawdzać warunku trójkąta dla każdej trójki liczb
informatyka +
9
Slide 10
Warsztaty
Algorytm, język programowania, komputer
Proces komputerowej realizacji
algorytmu:
• Opis algorytmu – słowny
• Zapis w języku programowania
(Pascal, C++)
• Kompilacja – przetłumaczenie
na język zrozumiały przez
komputer
• Wykonanie
• Testowanie
• Dokumentacja
informatyka +
10
Slide 11
Znajdowanie elementu w zbiorze
Znajdź element w zbiorze:
• 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
11
Slide 12
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 +
12
Slide 13
Algorytm Min – demo
Demonstracja przeszukiwania od lewej do prawej:
informatyka +
13
Slide 14
(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 +
14
Slide 15
Pełny
schemat
blokowy
algorytmu
Min
informatyka +
15
Slide 16
Skomputeryzowany schemat blokowy
Schemat blokowy wykonany
w programie ELI
Iteracja
Wprowadzanie danych
Ciąg (tablica) z danymi
Bloki
warunkowe
informatyka +
16
Slide 17
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
17
Slide 18
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 +
18
Slide 19
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
Witek
Bolek
Witek
Tomek
Tomek
Zenek
informatyka +
Tolek
Tolek
Felek
19
Slide 20
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 +
20
Slide 21
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
21
Slide 22
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 +
22
Slide 23
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 +
23
Slide 24
Porządkowanie przez wybór – demo (1)
Żółte – podciąg
już uporządkowany
Zielone i czerwone –
podciąg porządkowany
informatyka +
24
Slide 25
Porządkowanie przez wybór – demo (2)
Podciąg już
uporządkowany
Podciąg porządkowany
informatyka +
25
Slide 26
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 +
26
Slide 27
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 +
27
Slide 28
Poszukiwanie elementu w zbiorze
Problem poszukiwania elementu w zbiorze
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 +
28
Slide 29
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
Pewna niedogodność
– sprawdzanie, czy
koniec ciągu.
begin
i:=1;
while (x[i]<>y) and (i if x[i]=y then PrzeszukiwanieLiniowe:=i
else PrzeszukiwanieLiniowe:=-1
end
informatyka +
29
Slide 30
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, czy koniec
ciągu, bo przeszukiwanie zawsze
x[n+1]:=y;
zatrzyma się na elemencie y.
while x[i]<>y do i:=i+1;
if i<=n then PrzeszukiwanieLinioweWartownik:=i
else PrzeszukiwanieLinioweWartownik:=-1
end
informatyka +
30
Slide 31
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 +
31
Slide 32
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] else Prawy:=Srodek-1
Zmiana końców przedziału
end;
PrzeszukiwanieBinarne:=-1
y nie należy do
end
przeszukiwanego przedziału
informatyka +
32
Slide 33
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 +
33
Slide 34
Poszukiwanie przez połowienie – złożoność
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 !!!
34
Slide 35
Poszukiwanie przez połowienie
złożoność – dla orłów
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
1000
10000
100000
1000000
10000000
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 +
35
Slide 36
Jednoczesne znajdowanie min i max
pełny algorytm dziel i zwyciężaj
Algorytm Min-i-Max-Rek(Z,min,max)
Dane: Zbiór liczb Z
Wyniki: min – najmniejszy element w zbiorze Z
max – największy element w zbiorze Z
Rekurencyjne
wywołania na
podzbiorach
Krok 1. Jeśli Z = {a}, to min := a; max := a
Jeśli Z = {a, b}, to min := min {a, b}; max := max {a, b}
Krok 2. Gdy Z ma więcej niż dwa elementy, to:
2a. Podziel zbiór Z na dwa podzbiory Z1 i Z2
2b. Min-i-Max-Rek(Z1,min1,max1)
2c. Min-i-Max-Rek(Z2,min2,max2)
2d. min := min {min1, min2}; max := max {max1, max2}
informatyka +
36
Slide 37
Jednoczesne znajdowanie min i max
pełny algorytm dziel i zwyciężaj
DEMO
14524973
dziel
1452
4973
dziel
dziel
52
(2, 5)
14
(1 ,4)
49
(4, 9)
(min, max)
(1, 5)
73
(3, 7)
(3, 9)
(1, 9)
informatyka +
37
Slide 38
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 +
38
Slide 39
Sortowanie przez scalanie – scalanie
Scalane ciągi
Scalone ciągi, w
innym miejscu
informatyka +
39
Slide 40
Sortowanie przez scalanie – opis
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.
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 +
40
Slide 41
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 +
41
Slide 42
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 +
42
Slide 43
Sortowanie szybkie – opis
Rekurencyjne
wywołania na
podciągach
Algorytm szybkiego sortowania QuickSort(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 za element podziału v = xl i podziel
tym elementem dany ciąg. Oznacza to, że v znajdzie się
na pozycji elementu xk, dla pewnego k spełniającego l ≤ k
≤ p, i elementy na lewo będą od niego nie większe, a na
prawo – nie mniejsze.
Wykonaj dwa następne kroki.
Krok 2. QuickSort(l,k–1,x) – sortowanie elementów na lewo od v
Krok 3. QuickSort(k+1,p,x) – sortowanie elementów na prawo od v
informatyka +
43
Slide 44
Sortowanie szybkie
DEMO
7
5
8
10
1
15
12
4
11
19
1
7
5
1
10
1
15
12
4
11
19
8
7
5
1
4
1
15
12
10
11
19
8
7
5
1
4
1
15
12
10
11
19
8
Zamiana
miejscami
Zamiana
miejscami
Rekurencyjne
wywołania na
podciągach
1
5
Na lewo od 7 elementy
nie większe od 7 –
porządkujemy tak samo
1
4
7
15
7 na swoim
miejscu w ciągu
uporządkowanym
12
10
11
19
8
Na prawo od 7 elementy
nie mniejsze od 7 –
porządkujemy tak samo
informatyka +
44
Slide 45
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 +
45
Slide 46
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 +
46
Slide 47
Slide 2
ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA
ELEMENTY JĘZYKA PROGRAMOWANIA
Maciej M. Sysło
Uniwersytet Wrocławski
Uniwersytet UMK w Toruniu
[email protected]
informatyka +
2
Slide 3
Algorytm, algorytmika
Na str. 3-7 są zamieszczone uwagi
wstępne na temat algorytmiki.
Można je pominąć i wrócić później.
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
Slide 4
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
Slide 5
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 +
5
Slide 6
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 +
6
Slide 7
Myślenie algorytmiczne
Myślenie komputacyjne
(ang. computational thinking)
Reklama firmy IBM
z 1924 roku
Komputer to maszyna
do myślenia !!!
informatyka +
7
Slide 8
Poszukiwanie, porządkowanie,
elementy programowania
PLAN
• Rozgrzewka (warm-up) – kilka krótkich programów
• Przeszukiwanie zbioru – Min i Max: schematy blokowe,
pierwsze programy, złożoność algorytmu,
• Kompletowanie podium zwycięzców turnieju
• Jednoczesne znajdowanie najmniejszego i największego
elementu
• Porządkowanie przez wybór – iteracja algorytmu
• Porządkowanie przez zliczanie
• Poszukiwanie informacji w zbiorach nieuporządkowanych
i uporządkowanych
• Dziel i zwyciężaj, rekurencja: sortowanie przez scalanie i
sortowanie szybkie
informatyka +
8
Slide 9
Rozgrzewka przy komputerach
Rozgrzewka (warm-up) – kilka krótkich programów:
• obliczanie pole trójkąta
• dodatkowo sprawdzanie, czy dane są dobre – warunek
• obliczanie pola trójkąta dla ciągu danych – iteracja i tablice
Ciekawe zadanie dotyczące trójkątów:
Dane:
ciąg (bardzo długi) liczb
Odpowiedź: czy z każdej trójki liczb z tego ciągu można
zbudować trójkąt?
Wskazówka: istnieje rozwiązanie, w którym nie trzeba
sprawdzać warunku trójkąta dla każdej trójki liczb
informatyka +
9
Slide 10
Warsztaty
Algorytm, język programowania, komputer
Proces komputerowej realizacji
algorytmu:
• Opis algorytmu – słowny
• Zapis w języku programowania
(Pascal, C++)
• Kompilacja – przetłumaczenie
na język zrozumiały przez
komputer
• Wykonanie
• Testowanie
• Dokumentacja
informatyka +
10
Slide 11
Znajdowanie elementu w zbiorze
Znajdź element w zbiorze:
• 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
11
Slide 12
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 +
12
Slide 13
Algorytm Min – demo
Demonstracja przeszukiwania od lewej do prawej:
informatyka +
13
Slide 14
(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 +
14
Slide 15
Pełny
schemat
blokowy
algorytmu
Min
informatyka +
15
Slide 16
Skomputeryzowany schemat blokowy
Schemat blokowy wykonany
w programie ELI
Iteracja
Wprowadzanie danych
Ciąg (tablica) z danymi
Bloki
warunkowe
informatyka +
16
Slide 17
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
17
Slide 18
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 +
18
Slide 19
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
Witek
Bolek
Witek
Tomek
Tomek
Zenek
informatyka +
Tolek
Tolek
Felek
19
Slide 20
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 +
20
Slide 21
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
21
Slide 22
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 +
22
Slide 23
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 +
23
Slide 24
Porządkowanie przez wybór – demo (1)
Żółte – podciąg
już uporządkowany
Zielone i czerwone –
podciąg porządkowany
informatyka +
24
Slide 25
Porządkowanie przez wybór – demo (2)
Podciąg już
uporządkowany
Podciąg porządkowany
informatyka +
25
Slide 26
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 +
26
Slide 27
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 +
27
Slide 28
Poszukiwanie elementu w zbiorze
Problem poszukiwania elementu w zbiorze
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 +
28
Slide 29
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
Pewna niedogodność
– sprawdzanie, czy
koniec ciągu.
begin
i:=1;
while (x[i]<>y) and (i
else PrzeszukiwanieLiniowe:=-1
end
informatyka +
29
Slide 30
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, czy koniec
ciągu, bo przeszukiwanie zawsze
x[n+1]:=y;
zatrzyma się na elemencie y.
while x[i]<>y do i:=i+1;
if i<=n then PrzeszukiwanieLinioweWartownik:=i
else PrzeszukiwanieLinioweWartownik:=-1
end
informatyka +
30
Slide 31
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 +
31
Slide 32
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]
Zmiana końców przedziału
end;
PrzeszukiwanieBinarne:=-1
y nie należy do
end
przeszukiwanego przedziału
informatyka +
32
Slide 33
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 +
33
Slide 34
Poszukiwanie przez połowienie – złożoność
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 !!!
34
Slide 35
Poszukiwanie przez połowienie
złożoność – dla orłów
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
1000
10000
100000
1000000
10000000
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 +
35
Slide 36
Jednoczesne znajdowanie min i max
pełny algorytm dziel i zwyciężaj
Algorytm Min-i-Max-Rek(Z,min,max)
Dane: Zbiór liczb Z
Wyniki: min – najmniejszy element w zbiorze Z
max – największy element w zbiorze Z
Rekurencyjne
wywołania na
podzbiorach
Krok 1. Jeśli Z = {a}, to min := a; max := a
Jeśli Z = {a, b}, to min := min {a, b}; max := max {a, b}
Krok 2. Gdy Z ma więcej niż dwa elementy, to:
2a. Podziel zbiór Z na dwa podzbiory Z1 i Z2
2b. Min-i-Max-Rek(Z1,min1,max1)
2c. Min-i-Max-Rek(Z2,min2,max2)
2d. min := min {min1, min2}; max := max {max1, max2}
informatyka +
36
Slide 37
Jednoczesne znajdowanie min i max
pełny algorytm dziel i zwyciężaj
DEMO
14524973
dziel
1452
4973
dziel
dziel
52
(2, 5)
14
(1 ,4)
49
(4, 9)
(min, max)
(1, 5)
73
(3, 7)
(3, 9)
(1, 9)
informatyka +
37
Slide 38
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 +
38
Slide 39
Sortowanie przez scalanie – scalanie
Scalane ciągi
Scalone ciągi, w
innym miejscu
informatyka +
39
Slide 40
Sortowanie przez scalanie – opis
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.
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 +
40
Slide 41
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 +
41
Slide 42
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 +
42
Slide 43
Sortowanie szybkie – opis
Rekurencyjne
wywołania na
podciągach
Algorytm szybkiego sortowania QuickSort(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 za element podziału v = xl i podziel
tym elementem dany ciąg. Oznacza to, że v znajdzie się
na pozycji elementu xk, dla pewnego k spełniającego l ≤ k
≤ p, i elementy na lewo będą od niego nie większe, a na
prawo – nie mniejsze.
Wykonaj dwa następne kroki.
Krok 2. QuickSort(l,k–1,x) – sortowanie elementów na lewo od v
Krok 3. QuickSort(k+1,p,x) – sortowanie elementów na prawo od v
informatyka +
43
Slide 44
Sortowanie szybkie
DEMO
7
5
8
10
1
15
12
4
11
19
1
7
5
1
10
1
15
12
4
11
19
8
7
5
1
4
1
15
12
10
11
19
8
7
5
1
4
1
15
12
10
11
19
8
Zamiana
miejscami
Zamiana
miejscami
Rekurencyjne
wywołania na
podciągach
1
5
Na lewo od 7 elementy
nie większe od 7 –
porządkujemy tak samo
1
4
7
15
7 na swoim
miejscu w ciągu
uporządkowanym
12
10
11
19
8
Na prawo od 7 elementy
nie mniejsze od 7 –
porządkujemy tak samo
informatyka +
44
Slide 45
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 +
45
Slide 46
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 +
46
Slide 47