Anotace. Martin Pergel,

Podobne dokumenty
TGH01 - Algoritmizace

TGH01 - Algoritmizace

Edita Pelantová, katedra matematiky / 16

Komplexní analýza. Martin Bohata. Katedra matematiky FEL ČVUT v Praze Martin Bohata Komplexní analýza Mocninné řady 1 / 18

Linea rnı (ne)za vislost

(1) Derivace. Kristýna Kuncová. Matematika B2 17/18. Kristýna Kuncová (1) Derivace 1 / 35

Elementární funkce. Edita Pelantová. únor FJFI, ČVUT v Praze. katedra matematiky, FJFI, ČVUT v Praze

Kristýna Kuncová. Matematika B2 18/19

Matematika 2, vzorová písemka 1

1 Soustava lineárních rovnic

Aproximace funkcí 1,00 0,841 1,10 0,864 1,20 0,885. Body proložíme lomenou čarou.

Úvodní informace. 18. února 2019

MATEMATIKA 3. Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci

Logika V. RNDr. Kateřina Trlifajová PhD. Katedra teoretické informatiky Fakulta informačních technologíı BI-MLO, ZS 2011/12

Necht je funkce f spojitá v intervalu a, b a má derivaci v (a, b). Pak existuje bod ξ (a, b) tak, že f(b) f(a) b a. Geometricky

Matematika (KMI/PMATE)

5. a 12. prosince 2018

podle přednášky doc. Eduarda Fuchse 16. prosince 2010

Co nám prozradí derivace? 21. listopadu 2018

Powyższe reguły to tylko jedna z wersji gry. Istnieje wiele innych wariantów, można też ustalać własne zasady. Miłej zabawy!

Kristýna Kuncová. Matematika B2

Numerické metody minimalizace

Určitý (Riemannův) integrál a aplikace. Nevlastní integrál. 19. prosince 2018

Numerické metody 8. května FJFI ČVUT v Praze

Martin Pergel. 26. února Martin Pergel

Quick sort, spojové struktury

Operace s funkcemi [MA1-18:P2.1] funkční hodnota... y = f(x) (x argument)

Automatové modely. Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Inverzní Z-transformace

Funkce zadané implicitně. 4. března 2019

Stochastické modelování v ekonomii a financích Konzistence odhadu LWS. konzistence OLS odhadu. Předpoklady pro konzistenci LWS

Lineární algebra - iterační metody

DFT. verze:

GEM a soustavy lineárních rovnic, část 2

Obsah. Limita posloupnosti a funkce. Petr Hasil. Limita posloupnosti. Pro a R definujeme: Je-li a < 0, pak a =, a ( ) =. vlastní body.

(2) Funkce. Kristýna Kuncová. Matematika B2. Kristýna Kuncová (2) Funkce 1 / 25

Vybrané kapitoly z matematiky

Statistika (KMI/PSTAT)

Pojem množiny nedefinujeme, pouze připomínáme, že množina je. Nejprve shrneme pojmy a fakta, které znáte ze střední školy.

Paradoxy geometrické pravděpodobnosti

Katedra aplikované matematiky FEI VŠB Technická univerzita Ostrava

PA152,Implementace databázových systémů 2 / 25

Kapitola 4: Soustavy diferenciálních rovnic 1. řádu

Internet a zdroje. (Zdroje na Internetu) Mgr. Petr Jakubec. Katedra fyzikální chemie Univerzita Palackého v Olomouci Tř. 17.

Definice Řekneme, že PDA M = (Q,Σ,Γ,δ,q 0,Z 0,F) je. 1. pro všechna q Q a Z Γ platí: kdykoliv δ(q,ε,z), pak δ(q,a,z) = pro všechna a Σ;

Obsah. Zobrazení na osmistěn. 1 Zobrazení sféry po částech - obecné vlastnosti 2 Zobrazení na pravidelný konvexní mnohostěn

Algoritmy a datové struktury 2. Sylabus: Vyhledávání vzorků v textu: alg. Aho-Corasicková

Petr Hasil. c Petr Hasil (MUNI) Nekonečné řady MA III (M3100) 1 / 187


x2 + 2x 15 x 2 + 4x ) f(x) = x 2 + 2x 15 x2 + x 12 3) f(x) = x 3 + 3x 2 10x. x 3 + 3x 2 10x x 2 + x 12 10) f(x) = log 2.

ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA PEDAGOGICKÁ Katedra matematiky. Dudek Martin. obor Matematická studia

MATEMATIKA 3 NUMERICKÉ METODY. Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci

kontaktní modely (Winklerův, Pasternakův)

Komplexní analýza. Martin Bohata. Katedra matematiky FEL ČVUT v Praze Martin Bohata Komplexní analýza Úvod 1 / 32

TGH08 - Optimální kostry

Petr Křemen FEL ČVUT. Petr Křemen (FEL ČVUT) Vysvětlování modelovacích chyb 133 / 156

Kapitola 2. Nelineární rovnice

Ústav teorie informace a automatizace RESEARCH REPORT. Pavel Boček, Karel Vrbenský: Implementace algoritmu MIDIA v prostředí Google Spreadsheets

Kombinatorika a komplexní aritmetika

Matematika 1 Jiˇr ı Fiˇser 24. z aˇr ı 2013 Jiˇr ı Fiˇser (KMA, PˇrF UP Olomouc) KMA MAT1 24. z aˇr ı / 52

Zadání: Vypočítejte hlavní momenty setrvačnosti a vykreslete elipsu setrvačnosti na zadaných

Kombinatorika a grafy I

PARADIGMATA PROGRAMOVÁNÍ 1B

6 Dedekindovy řezy (30 bodů)

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algebra I Cvičení. Podstatná část příkladů je převzata od kolegů, jmenovitě Prof. Kučery, Doc. Poláka a Doc. Kunce, se

Register and win!

Výzvy, které před matematiku staví

Teorie. kuncova/ Definice 1. Necht f je reálná funkce a a R. Jestliže existuje.

Odpřednesenou látku naleznete v kapitolách skript Abstraktní a konkrétní lineární algebra.

NDMI002 Diskrétní matematika

Příručka k rychlé instalaci: NWD2105. Základní informace. 1. Instalace softwaru

Obsah. 1.2 Integrály typu ( ) R x, s αx+β

Nekomutativní Gröbnerovy báze

1 Dedekindovy řezy (30 bodů)

1 Definice. A B A B vlastní podmnožina. 4. Relace R mezi množinami A a B libovolná R A B. Je-li A = B relace na A

NÁVOD K POUŽITÍ KEZELÉSI KÉZIKÖNYV INSTRUKCJA OBSŁUGI NÁVOD NA POUŽÍVANIE. Česky. Magyar. Polski. Slovensky

Obsah. Petr Hasil. (konjunkce) (disjunkce) A B (implikace) A je dostačující podmínka pro B; B je nutná podmínka pro A A B: (A B) (B A) A (negace)

ÚVOD DO ARITMETIKY Michal Botur

Reprezentace dat. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner

Univerzita Karlova v Praze Matematicko-fyzikální fakulta. algoritmu. Katedra algebry

7. Aplikace derivace

Okrajový problém podmínky nejsou zadány v jednom bodu nejčastěji jsou podmínky zadány ve 2 bodech na okrajích, ale mohou být

Jednoduchá zobrazení. Podpořeno z projektu FRVŠ 584/2011.

Univerzita Karlova v Praze Matematicko-fyzikální fakulta

Statistika (KMI/PSTAT)

Univerzita Karlova v Praze Matematicko-fyzikální fakulta. Kvantové algoritmy. Vedoucí bakalářské práce: Doc. RNDr. Pavel Cejnar, Dr.

02GR - Odmaturuj z Grup a Reprezentací

Jednoduchá zobrazení. Podpořeno z projektu FRVŠ 584/2011.

HL24285SMART. Návod k použití Návod na použitie Instrukcja obsługi Használatı utasítás. Licensed by Hyundai Corporation, Korea

návod k použití instrukcja obsługi

Západočeská univerzita v Plzni Fakulta aplikovaných věd. Katedra matematiky. Semestrální práce - matematika a byznys

Matematika III Stechiometrie stručný

Formálne jazyky Automaty. Formálne jazyky. 1 Automaty. IB110 Podzim

Internetová matematická olympiáda 8. ročník, Baví se student Fakulty strojního inženýrství VUT v Brně (FSI) s kamarádem:

Matematická analýza pro učitele (text je v pracovní verzi)

Návod k použití BUBNOVÁ SUŠIČKA

Univerzita Karlova v Praze Matematicko-fyzikální fakulta

3. Problémy s omezujícími podmínkami (CSP Constraint Satisfaction Problems)

Úvod do Informatiky (FI:IB000)

Transkrypt:

Anotace Třídění, medián lineárně.

Třídění Ukazovali jsme si: bubblesort, shakesort, zatřid ování (insert-sort), přímý výběr (select-sort) důležité je znát algoritmy, není nutné pamatovat si přesné přiřazení algoritmů k názvům. Složitost těchto algoritmů je Θ(n 2 ). Dále byl Quicksort s analýzou složitosti a vysvětlením různých voleb pivota (a dopady této volby na složitost). To ovšem zdaleka není vše, dnes budou: Heapsort (alias třídění haldou), Mergesort (vulgo třídění sléváním), Analýza složitosti problému třídění porovnáním, Algoritmy nestojící na porovnání, Algoritmy vnějšího třídění.

Halda Co je halda? Definition Halda je datová struktura osazená operacemi postav haldu a extract min, kde prvky jsou organizovány do stromu takového, že hodnota obsažená v rodiči je nejvýš taková, jako hodnota v synu. Pozorování: Minimum je v koření haldy.

Halda pokr. Většinou pracujeme s binárními haldami a jestě k tomu tzv. leftist: Binární halda je taková halda, že každý prvek má nejvýše dva potomky, navíc vzdálenosti z kořene do listů se liší (pro jednotlivé listy) nejvýše o jedna. V souvislosti s binární haldou mluvíme pro každý prvek o levém resp. pravém synu. Haldu si typicky představujeme nakreslenu s ohledem na tuto levo-pravou orientaci. Binární halda je leftist, jestliže existuje nejvýše jeden prvek x, který má právě jednoho syna a to levého. Nalevo od x jsou všechny cesty z kořene do listů o jedna delší než napravo od x. Technicky v leftist haldě přidáme prvku x pravého syna s hodnotou.

Halda a její reprezentace Binární leftist haldu lze snadno reprezentovat v poli. Potomky prvku na pozici i jsou na pozicích 2i a 2i +1. Rodič prvku je na pozici i 2, halda je tedy velmi elegantní struktura, kterou se snadno prochází. Třídění haldou vypadá tak, že postavíme haldu a n-krát provedeme extract min. Zbývá drobnost, impelementovat postav haldu a extract min.

Jak postavit haldu Pozor, kreativní pseudokód! function zabublej(i:integer); begin jeste:=true; while (2*i<=n) and jeste do {pozor na 2i +1} if (halda[2*i]<halda[i]) or (halda[2*i+1]<hodnota[i]) then begin if(halda[2*i+1]<halda[2*i]) then j:=2*i else j:=2*i+1; pom:=halda[i]; halda[i]:=halda[j]; halda[j]:=pom;{prohod obsahy} i:=j; end else jeste:=false; end;

Jak postavit haldu Důkaz. Haldu budeme stavět zdola nahoru! Do haldy ulož příslušné prvky a udělej: for i:=n div 2 downto 1 do zabublej(i); volání zabublej rozšíří vlastnost haldy (tedy nerovnosti hodnot) i na prvek i. Indukcí: Na začátku platí na dolní úrovni (n/2 až n). Pokud platí od i +1 do n, může dojít k chybě jen na pozici i. Zabublání nahradí současný prvek tím menším ze synů, chyba propadá dolů po jedné cestě (tedy je vždy na jednom místě). Tato chyba bud to zanikne samovolně (test ve funkci zabublej), nebo zanikne doputováním do listu.

Analýza složitosti Voláme funkci zabublej, která vždy v nejhorším případě propadne do listu. Jaká je vzdálenost do listu? Pro první polovinu (procházených) prvků 1, další čtvrtinu 2, pro další osminu 3..., tedy celkem přehazujeme nejvýše: logn i=1 logn n i=1 i n logn = n 2 i i=1 i 2 i = n 1 2 i 2 = knkrát. logn i=1 logn j=i logn 1 1 1 2 = n i+1 2 i 2 i=1 i 1 1 2 Sčítání využívá jen součet geometrické řady a triviální odhady! Problém sestavení haldy má tedy složitost Θ(n) (dolní odhad je triviální, na každý prvek musíme aspoň jednou sáhnout).

Funkce extract min function extract min:integer; begin extract min:=halda[1]; halda[1]:=halda[n]; n:=n-1; zabublej(1); end; Složitost je O(log n), důkaz korektnosti je jedna iterace indukčního kroku korektnosti stavění haldy, tedy: Porucha může nastat jedině v kořeni. Funkce zabublej sune poruchu dolů (udržuje ji na jednom místě) a nejpozději v listu porucha zanikne.

Algoritmus heapsort Analýza složitosti Napřed postavíme haldu s lineární složitostí (R. Tarjan), pak n-krát odebereme minimum se složitostí O(log n), celkem tedy je složitost heapsortu O(n log n). Výhoda: Heapsort je rychlý, nepoužívá místo navíc, nedělá si zbytečné poznámky (co ještě setřídil a co už ne), vystačí jen s údajem o velikosti haldy.

Mergesort třídění sléváním Máme-li dvě setříděné posloupnosti, k jejich setřídění stačí tyto sĺıt. Posloupnost délky 1 je vždy setříděná. Slitím dvou (setříděných) posloupností délky k vznikne setříděná posloupnost délky 2k. Posloupnost délky n je setříděna, pokud koukáme na její setříděný začátek délky n.

Mergesort funkce merge Pozor, kreativní pseudokód! procedure merge(a,b:posl; var kam:posl); begin i:=1;j:=1;k:=1; while(i<length(a)) or (j<length(b)) do begin if(i=length(a)) then begin kam[k]:=b[j]; inc(k); inc(j); end else if(j=length(b))then DTTO... else {oba seznamy neprazdne} if(a[i]<b[j]) then begin c[k]:=a[i]; inc(k); inc(i); end else begin c[k]:=b[j]; inc(k,j); end; end; end;

Mergesort myšlenka implementace Třídíme posloupnost c o délce n. if n > 1 then rozdel c na a a b přibližně stejných délek mergesort(a); mergesort(b); merge(a,b,c);

Mergesort analýza složitosti Předpokládejme, že n je mocnina dvojky (jinak vstup nejvýše zdvojnásobíme falešnými hodnotami). Kolikrát budeme dělit vstupní pole [a tedy jak hluboká bude rekurze]? Kolikrát musíme n vydělit dvojkou, abychom dostali jedničku? log n-krát. Jaká je složitost samotného těla funkce mergesort? Lineární (v délce vstupu). budeme jednotlivé hladiny rekurze analyzovat dohromady (režie každé hladiny rekurze bude lineární). Hladin rekurze je O(logn), tedy celkem je složitost O(nlogn). Bylo by též možno použít tzv. Master theorem, tento výpočet je ale totožný s důkazem jedné jeho varianty (té s rovností).

Mergesort poznámky Všimněte si, že Mergesort má pro všechny vstupy stejnou složitost! Jde o čistou vydestilovanou rekurzi, kdy žádná funkce vlastně nic nedělá, ale dohromady to funguje! Algoritmus poměrně kriticky vyžaduje místo navíc!

Třídění porovnáním Třídící algoritmy jsou často založené na porovnání. Naše algoritmy (zatím uvedené) jsou široce použitelné, protože nepotřebují o tříděných prvcích vědět víc, než který je větší a který menší. Takové nejsou všechny třídící algoritmy! Zatím se nám nepodařilo složitostí třídicích algoritmů dostat do o(nlogn). Jsme jen neschopní, nebo je za tím nějaký přírodní zákon? Je za tím přírodní zákon.

Algoritmy třídící porovnáním Definition Řekneme, že třídicí algoritmus je algoritmem třídění porovnáním, jestliže algoritmus kromě porovnání (dvou čísel) nevyužívá žádné jiné informace o číslech. Například algoritmus nesmí spoléhat na to, zda čísla jsou celá, kladná, iracionální... Takový algoritmus je vlastně schopen třídit cokoliv, na čem je dobře definováno porovnání na vlastnost býti menší nebo roven.

Algoritmy třídění porovnáním pokr. Pro účely dolního odhadu složitosti třídění porovnáním budeme počítat za krok algoritmu jen a jen porovnání dvou čísel. Ukážeme tedy, že jakýkoliv korektní třídicí algoritmus musí pro vstup délky n provést Ω(n log n) porovnání. Pozorování: Algoritmus třídění porovnáním běží pevně (přesně) definovaným způsobem, do chvíle, kdy porovná dvě čísla (tam se může rozvětvit podle výsledku porovnání).

Rozhodovací strom Definition Rozhodovací strom algoritmu A je strom, jehož listy odpovídají jednotlivým možným výsledkům algoritmu A. Strom je organizován tak, že výpočet algoritmu A začíná v kořeni a každé větvení směrem k listu odpovídá nějakému rozhodnutí programu. Algoritmy třídění porovnáním se smějí rozhodovat jen na základě porovnání. Větvení v rozhodovacím stromě tudíž budou odpovídat jednotlivým porovnáním. Uvážíme takový algoritmus, který místo setřídění oznámí, jak zapermutovat vstup, abychom získali setříděnou posloupnost (jde evidentně o ekvivalentní problémy).

Použití rozhodovacích stromů Složitost algoritmu v nejhorším případě odpovídá maximální hloubce listu v příslušném rozhodovacím stromě. Chceme tedy ukázat, že v rozhodovacím stromě jakéhokoliv třídícího algoritmu existuje list v hloubce Θ(n log n). Použijeme standardní počítací argument, tedy ukážeme, že má-li mít strom dostatečný počet listů (na setřídění každé posloupnosti), musí mít hloubku alespoň n 2 logn. Listů je třeba aspoň n!, jinak najdeme dvě různé permutace (čísel 1...n), které algoritmus nechá zapermutovat stejně (a tedy aspoň jednu permutaci nesetřídí). Strom je binární (každý vrchol má nejvýš dva syny), tudíž hloubka stromu musí být aspoň log 2 n! log 2 n n 2 = n 2 log 2n. Odhad faktoriálu v Kapitolách z diskrétní matematiky.

Třídění porovnáním poznámky Dolní odhad třídění porovnáním ukazuje složitost Θ(n log n) pro algoritmy Quicksort a Heapsort (pro Mergesort také, ale tam jsme ji nahlédli snáze. Co když porovnání nevrací dvě hodnoty ale více? Větvíme vždy na konečně možností, neuděláme tedy rozhodovací strom binární, ale k-ární a logaritmus jen změní základ, tedy se změní multiplikativní konstanta.