47

ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

  • Upload
    hanhu

  • View
    224

  • Download
    1

Embed Size (px)

Citation preview

Page 1: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu
Page 2: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA

Maciej M. SysłoUniwersytet Wrocławski

Uniwersytet UMK w [email protected]

2informatyka +

Page 3: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Algorytm, algorytmika

Algorytm – opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia jakiegoś celu

Pierwszy algorytm – algorytm Euklidesa300 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

Na str. 3-7 są zamieszczone uwagi wstępne na temat algorytmiki. Można je pominąć i wrócić później.

Page 4: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Algorytmy a informatyka

Informatyka – jedna z definicji: dziedzina wiedzy i działalności zajmująca się algorytmamiCzy 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

Page 5: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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

Page 6: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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ś programuKonkluzja: powinniśmy lepiej poznać programowanie komputerów

informatyka + 6

Page 7: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Myślenie algorytmiczneMyślenie komputacyjne (ang. computational thinking)

informatyka + 7

Reklama firmy IBM z 1924 roku

Komputer to maszyna do myślenia !!!

Page 8: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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

Page 9: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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) liczbOdpowiedź: 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

Page 10: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

WarsztatyAlgorytm, język programowania, komputer

informatyka + 10

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

Page 11: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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ą remisyPodstawowa operacja – porównanie:

• dwóch liczb lub kombinacji liczb (data, karty): czy x < y ?• dwóch zawodników: rozegranie meczu

informatyka + 11

Page 12: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Specyfikacja problemu

Specyfikacja problemu – dokładne opisanie problemu

Problem Min – Znajdowanie najmniejszego elementu w zbiorzeDane: 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 zbiorzeKrok 1. Przyjmij za min pierwszy element w zbiorze (w ciągu),

czyli przypisz min := x1.Krok 2. Dla kolejnych elementów xi, gdzie i = 2, 3, ..., n,

jeśli min > xi, to przypisz min := xi.

Algorytm Max – prosta modyfikacja: zamiana > na <Wyznaczanie imin – indeksu elementu o wartości min

informatyka + 12

imin := 1

imin := i

Page 13: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Algorytm Min – demo

Demonstracja przeszukiwania od lewej do prawej:

informatyka + 13

Page 14: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

(Zgrubny) schemat blokowy algorytmu Min

informatyka + 14

Instrukcja iteracyjna

Instrukcje warunkowe:rozgałęzienia algorytmu

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.

Krok 1:

Krok 2:

min ← pierwszy element ze zbioru A

Czy porównano wszystkie elementy ze zbioru A ?

Nie

min > x ?

Tak

x ← kolejny element ze zbioru A

Tak

min ← x

Nie

Koniec algorytmu

Page 15: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Pełny schemat blokowy algorytmu Min

informatyka + 15

Page 16: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Skomputeryzowany schemat blokowy

informatyka + 16

Schemat blokowy wykonany w programie ELI

Ciąg (tablica) z danymi

Bloki warunkowe

Iteracja

Wprowadzanie danych

Page 17: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Algorytm Min w postaci programu

Program w języku Pascalprogram Min;var i,imin,min,n,x:integer;

beginread(n);

read(x); min:=x; imin:=1;

for i:=2 to n do beginread(x);

if min > x then beginmin:=x; imin:=i

endend;write(imin,min)

end.

informatyka + 17

nazwa programudeklaracje, typy zmiennychblok programu – początek czytaj nczytaj pierwszy element iteracja od 2 do nczytaj kolejny elementinstrukcja warunkowapopraw mininstrukcja war. – koniec iteracja – koniec pisz wynikblok programu – koniec

Page 18: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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

Page 19: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Wyłanianie najlepszego zawodnika w turniejuczyli inny sposób znajdowania max (lub min)

informatyka + 19

Bartek Romek Bolek Witek Tomek Zenek Tolek Felek

Bartek Witek Tomek Tolek

Bartek Tomek

TomekPorównania – mecze Ośmiu zawodników: 7 meczyn zawodników: n – 1 meczy

a więc nie jest szybsza

Page 20: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

A może mamy algorytm najlepszy?

Podsumowanie:Mamy dwa algorytmy znajdowania min lub max:• przeszukiwanie liniowe• rozegranie turniejuktó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

Page 21: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

A jak znaleźć drugiego najlepszego zawodnika w turnieju?

informatyka + 21

Bartek Romek Bolek Witek Tomek Zenek Tolek Felek

Bartek Witek Tomek Tolek

Bartek Tomek

TomekCzy jest nim Bartek?Bo przegrał z Tomkiem?

Ale Bartek nie grał z drugą połową!

???

???Tylko dwa dodatkowe mecze!

Page 22: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

3 1 2 2 5 3 4 8 2 5

Jednoczesne znajdowanie min i max

informatyka + 22

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

Kandydaci na min

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

Porównania parami

3↑3 ? 1

↓1

2↑2 ? 2

↓2

5↑5 ? 3

↓3

8↑

4 ? 8↓4

5↑

2 ? 5↓2

Page 23: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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 SortIdea: 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

Page 24: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Porządkowanie przez wybór – demo (1)

informatyka + 24

Żółte – podciąg już uporządkowany

Zielone i czerwone –podciąg porządkowany

Page 25: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Porządkowanie przez wybór – demo (2)

informatyka + 25

Podciąg już uporządkowany

Podciąg porządkowany

Page 26: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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 = ?

informatyka + 26

5 ♦ ♦ ♦ ♦ ♦ ∇

4 ♦ ♦ ♦ ♦ ∇ ∇

3 ♦ ♦ ♦ ∇ ∇ ∇

2 ♦ ♦ ∇ ∇ ∇ ∇

1 ♦ ∇ ∇ ∇ ∇ ∇

Przykładn = 6

6 = n

5 = n – 1

Pole prostokąta: 5 x 6Suma = pole czarnych diamentów:

5 x 62

Ogólnie suma:(n – 1) x n

2Liczby trójkątne

Page 27: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Porządkowanie przez zliczanie

Problem porządkowania niewielkich liczbDane: 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 – CountingSortIdea: 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

Page 28: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Poszukiwanie elementu w zbiorze

Problem poszukiwania elementu w zbiorzeDane: Zbiór elementów w postaci ciągu n liczb x1, x2, ..., xn.

Wyróżniony element yWynik: 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

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

– wstaw y do ciągu

Page 29: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Poszukiwania w zbiorze nieuporządkowanym

Algorytm – Poszukiwanie linioweKrok 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

begini:=1;

while (x[i]<>y) and (i<n) do i:=i+1;if x[i]=y then PrzeszukiwanieLiniowe:=i

else PrzeszukiwanieLiniowe:=-1

end

informatyka + 29

Pewna niedogodność – sprawdzanie, czy koniec ciągu.

Page 30: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Poszukiwania w zbiorze nieuporządkowanymz wartownikiem

Algorytm – Poszukiwanie liniowe z wartownikiemTakie same kroki algorytmu inna implementacja, czyli komputerowa realizacja:

na końcu ciągu:

x1 x2 x3 x4 … xn

begini:=1;

x[n+1]:=y;

while x[i]<>y do i:=i+1;

if i<=n then PrzeszukiwanieLinioweWartownik:=i

else PrzeszukiwanieLinioweWartownik:=-1

end

informatyka + 30

wstawiamy wartownika – pilnuje końca ciąguxn+1

Nie ma sprawdzania, czy koniec ciągu, bo przeszukiwanie zawsze zatrzyma się na elemencie y.

Page 31: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Poszukiwanie w zbiorze uporządkowanymZabawa w zgadywanie liczby

informatyka + 31

Zgadywana liczba: 17 w przedziale [1 : 20]Metoda: połowienia przedziału Kolejne kroki: strzałka wskazuje wybór;

kolor czerwony – ciąg do przeszukania:

Page 32: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Poszukiwanie przez połowieniew 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;beginLewy:=k; Prawy:=l;while Lewy<=Prawy do beginSrodek:=(Lewy+Prawy) div 2;if x[Srodek]=y then beginPrzeszukiwanieBinarne:=Srodek; exitend; {element y nalezy do przeszukiwanego ciagu}if x[Srodek]<y then Lewy:=Srodek+1else Prawy:=Srodek-1end;PrzeszukiwanieBinarne:=-1

end

informatyka + 32

Połowienie przedziału

Początkowe końce przedziału

Zmiana końców przedziału

y nie należy do przeszukiwanego przedziału

y należy do przedziału

Page 33: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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

Umieszczanie przez połowieniew ciągu uporządkowanym

Page 34: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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 = 1200Kolejne 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 11 • liniowy 1200

informatyka + 34

Poszukiwanie przez połowienie – złożoność

Porównaj, jaka jest potęga uporządkowania !!!

Page 35: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Dla n = 1200 liczba porównań w algorytmie połowienia wyniosła 11Pytania:

• Jak liczba porównań zależy od n?• Jak dobry jest to algorytm?

Liczba porównań dla różnych n:

informatyka + 35

Poszukiwanie przez połowieniezłożoność – dla orłów

n liczba porównań

100 71000 10

10000 14100000 17

1000000 2010000000 24

ok.log2 n

Funkcja logarytm, bardzo ważna w algorytmice

logarytm to anagram od

algorytm

Algorytm poszukiwania przez połowienie jest optymalny, czyli najszybciej przeszukuje zbiory uporządkowane.

Page 36: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Jednoczesne znajdowanie min i maxpełny algorytm dziel i zwyciężaj

informatyka + 36

Algorytm Min-i-Max-Rek(Z,min,max)Dane: Zbiór liczb ZWyniki: min – najmniejszy element w zbiorze Z

max – największy element w zbiorze Z

Krok 1. Jeśli Z = {a}, to min := a; max := aJeś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 Z22b. Min-i-Max-Rek(Z1,min1,max1)2c. Min-i-Max-Rek(Z2,min2,max2) 2d. min := min {min1, min2}; max := max {max1, max2}

Rekurencyjne wywołania na podzbiorach

Page 37: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Jednoczesne znajdowanie min i maxpełny algorytm dziel i zwyciężaj DEMO

informatyka + 37

1 4 5 2 4 9 7 3

1 4 5 2 4 9 7 3dziel

dziel

1 4 5 2

dziel

4 9 7 3(1 ,4) (2, 5) (4, 9) (3, 7)

(min, max)

(1, 5)(3, 9)

(1, 9)

Page 38: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Sortowanie przez scalanie – scalanie

informatyka + 38

Scalanie – z dwóch uporządkowanych ciągów utwórz jeden uporządkowany

Algorytm scalania. Scal. Dane: dwa ciągi uporządkowaneWynik: scalony ciąg uporządkowany Krok: do tworzonego ciągu pobieraj najmniejszy element z

czoła scalanych ciągów

1 3 5 7 10 12

1 2 6 9 11 15 17 20

1 3 5 7 10 121 2 6 9 11 15 17 20

Scalane ciągiScalanie

1 1 2 3 5 6 7 9 10 11 12 15 17 20 Scalony ciąg

Page 39: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Sortowanie przez scalanie – scalanie

informatyka + 39

Scalane ciągi

Scalone ciągi, w innym miejscu

Page 40: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

informatyka + 40

Algorytm porządkowania przez scalanie MergeSort(l,p,x)Dane: Ciąg liczb xl, xl+1, …, xpWynik: 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ąguKrok 3. MergeSort(s+1,p,x) – sortowanie drugiej połowy ciąguKrok 4. Zastosuj algorytm Scal do ciągów (xl, …, xs) i (xs+1, …, xp)

i wynik umieść w ciągu (xl, …, xp).

Rekurencyjne wywołania na podciągach

Sortowanie przez scalanie – opis

Page 41: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

informatyka + 41

2 1 2 9 5 0

2 1 2 9 5 0dziel

dziel

2 1 dziel

9

0

1 2

9 5

1 2 2 0 5 9

0 1 2 2 5 9

Sortowanie przez scalanie DEMO

dziel

2 1

2

scal

scal

scal

scal

scal5

dziel

5 9

Page 42: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

Sortowanie przez scalanie DEMO

informatyka + 42

Scalane ciągi

Wynik scalania dodatkowym miejscu

Posortowana pierwsza połowa ciągu

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ą

Page 43: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

informatyka + 43

Algorytm szybkiego sortowania QuickSort(l,p,x)Dane: Ciąg liczb xl, xl+1, …, xpWynik: 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 vKrok 3. QuickSort(k+1,p,x) – sortowanie elementów na prawo od v

Rekurencyjne wywołania na podciągach

Sortowanie szybkie – opis

Page 44: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

informatyka + 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

1 5 1 4 7 15 12 10 11 19 8

Na lewo od 7 elementy nie większe od 7 –porządkujemy tak samo

7 na swoim miejscu w ciągu uporządkowanym

Na prawo od 7 elementy nie mniejsze od 7 –porządkujemy tak samo

Rekurencyjne wywołania na podciągach

Zamiana miejscami

Zamiana miejscami

Page 45: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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

Page 46: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu

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 realizacjeKursy (24 godz.) – Kuźnia Informatycznych Talentów – KIT dla Orłów:• Przegląd podstawowych algorytmów• Struktury danych i ich wykorzystanie• Zaawansowane algorytmyTendencje – 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

Page 47: ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA · ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA Maciej M. Sysło Uniwersytet Wrocławski. Uniwersytet UMK w Toruniu