Algoritmizace a programovn Pole Pklady 3 Tdn pol

  • Slides: 21
Download presentation
Algoritmizace a programování Pole – Příklady 3

Algoritmizace a programování Pole – Příklady 3

Třídění polí n V poli máme prvky a chceme je setřídit: n od nejmenšího

Třídění polí n V poli máme prvky a chceme je setřídit: n od nejmenšího po největší n podle abecedy n atd.

Bubble sort n n n Bubble sort jinak známý jako řazení záměnou, je nejjednodušší,

Bubble sort n n n Bubble sort jinak známý jako řazení záměnou, je nejjednodušší, ale nejpomalejší třídící algoritmus Název vyjadřuje průběh zpracování, při kterém prvky s vyšší hodnotou ”probublávají“ na konec seznamu Používá se spíše pro výukové účely

Bubble sort n n Princip: n Algoritmus opakovaně prochází seznam, přičemž porovnává každé dva

Bubble sort n n Princip: n Algoritmus opakovaně prochází seznam, přičemž porovnává každé dva sousedící prvky, a pokud nejsou ve správném pořadí, prohodí je. Tento postup opakuje, tak dlouho, až dostaneme konečnou uspořádanou posloupnost Bubble Sort můžeme vylepšit: n Po každém projetí všech prvků v poli si můžeme dovolit postupně zkracovat (zprava) o 1 prvek a poslední úplně vypustit n Bubble sort s přetřásáním (Shaker sort nebo Cocktail sort), založený na dvou Bubble sortech - jeden zleva doprava, druhý zprava doleva

Bubble sort - kód for i in range (1, 4): for j in range

Bubble sort - kód for i in range (1, 4): for j in range (0, 2): if (pole[j]>pole[j+1]): pomocna=pole[j]=pole[j+1]=pomocna print ("Setříděné pole: ", pole) http: //www. cs. oswego. edu/~mohammad/classes/csc 241/samp les/sort/Sort 2 -E. html

Bubble sort – postup pro hodnoty 10, 9, 8 i j pole[j] pole[j+1] pomocna

Bubble sort – postup pro hodnoty 10, 9, 8 i j pole[j] pole[j+1] pomocna pole[j] pole[j+1] 1 0 10 9 10 1 1 10 8 10 1 2 10 x x 10 x 2 0 9 8 9 2 1 9 10 x 9 10 2 2 10 x x 10 x 3 0 8 9 x 8 9 3 1 9 10 x 9 10 3 2 10 x x 10 x

Select sort n n Jeden z nejjednodušších algoritmů Princip: nalezení minima, které se přesune

Select sort n n Jeden z nejjednodušších algoritmů Princip: nalezení minima, které se přesune na začátek pole (nebo nalezení maxima a to dávat na konec) n v druhém kroku již nebudeme při hledání minima brát v potaz dříve nalezené minimum n po dostatečném počtu kroků dostaneme pole seřazené n

Select sort n n Pro praktické účely je vysoce neefektivní, využívá se hlavně pro

Select sort n n Pro praktické účely je vysoce neefektivní, využívá se hlavně pro výukové účely Výhody: n n je jednoduchý na pochopení a implementaci Nevýhody: je časově velmi náročný (2. nejpomalejší) n není stabilní (mění pozici prvků, které jsou při porovnávání vyhodnoceny jako stejné) n

Insert sort n n n Nejlepší mezi jednoduchými třídícími algoritmy Při třídění prvky řadí

Insert sort n n n Nejlepší mezi jednoduchými třídícími algoritmy Při třídění prvky řadí přesně tam, kde mají být Princip: pole vidí rozdělené na 2 části - setříděnou a nesetříděnou n postupně vybírá prvky z nesetříděné části a vkládá je mezi prvky v setříděné části n

n Použití: Insert sort V praxi je rychlý pro velmi malá pole (max. cca

n Použití: Insert sort V praxi je rychlý pro velmi malá pole (max. cca 25 prvků) n využít se dá také pro výukové účely n n Výhody: je jednoduchý na pochopení a implementaci n stabilní (nemění pozici prvků které jsou při porovnávání vyhodnoceny jako ekvivalentní) n n Nevýhody: n je časově velmi náročný (3. nejpomalejší)

Merge sort n n Algoritmus založený na tzv. principu rozděl a panuj. To znamená,

Merge sort n n Algoritmus založený na tzv. principu rozděl a panuj. To znamená, že pokud nějaký problém neumíme vyřešit v celku, rozložíme si ho na více menších a jednodušších problémů V problému třídění se často chceme dostat až k poli velikosti 1, které považujeme automaticky za setříděné

Merge sort n Princip: n Merge sort operuje s myšlenkou, že dokážeme velmi rychle

Merge sort n Princip: n Merge sort operuje s myšlenkou, že dokážeme velmi rychle a v lineárním čase slít (spojit, anglicky merge) dvě již setříděná pole do jednoho tak, aby výsledné pole bylo opět setříděné n Na začátku samozřejmě máme jen jedno pole a to setříděné není n My si ho však můžeme rozdělit na 2 poloviny, každou polovinu opět rozdělit na další poloviny a tak dále až na jednoprvková pole, která považujeme za setříděná n Jak se postupně vynořujeme z rekurze, sléváme tato jednoprvková pole na dvouprvková, ta na čtyřprvková a tak pokračujeme, dokud nám nezbudou dvě velká pole, která když slijeme, dostaneme naše původní pole setříděné

Merge sort n n n Použití: n Může být náhradou Heap Sortu (viz. dále),

Merge sort n n n Použití: n Může být náhradou Heap Sortu (viz. dále), pokud pro to máme důvod. Jinak nemá žádnou výhodu oproti ostatním. Výhody: n je poměrně rychlý (3. nejrychlejší) n stabilní (nemění pozici prvků které jsou při porovnávání vyhodnoceny jako ekvivalentní) Nevýhody: n pro svou práci potřebuje další pole o velikosti n (kde si poznačí indexy) n je nejpomalejší pro velmi malá pole (min. asi 25 prvků)

Heap sort n n Heap Sort nebo-li řazení haldou je jeden z nejlepších obecných

Heap sort n n Heap Sort nebo-li řazení haldou je jeden z nejlepších obecných algoritmů řazení, založených na porovnávání prvků Princip: n Algoritmus staví na myšlenkách algoritmu Selection sort a je tedy založený na odtrhávání maxima, které vždy přesouvá na konec pole n Po začlenění všech maxim na konec máme pole setříděné n Problém Selection sortu však byl právě ve hledání maxima nebo minima. V každém vnějším cyklu se celá nesetříděná část pole musela projet a každý prvek zkontrolovat, zda není náhodou hledaným maximem n Heap Sort využívá datové struktury označované jako halda ( heap), která umí velmi efektivně provést operaci vložení prvku a operaci výběr největšího prvku n Proto lze pomocí haldy seřadit dodaná data od největšího k nejmenšímu pomocí jejich vložení do haldy a následného postupného vybírání největšího prvku n Představit si to můžeme jako, rodokmen, kde seřazujeme podle vztahů

Heap sort n n n Použití: n poměrně velmi rychlý n asi nejlepší algoritmus

Heap sort n n n Použití: n poměrně velmi rychlý n asi nejlepší algoritmus na třídění obrovských polí n Je taky bezpečný vůči útokům n V praxi se využívá dohromady s Quick sortem Výhody: n je velmi rychlý (2. nejrychlejší) n nepotřebuje tolik výpočetní síly, jako ostatní Nevýhody: n je těžký na pochopení n není stabilní (mění pozici prvků které jsou při porovnávání vyhodnoceny jako ekvivalentní)

Quick sort n n Quick Sort nebo-li rychlé (rekurzivní) řazení do tříd je nejrychlejší

Quick sort n n Quick Sort nebo-li rychlé (rekurzivní) řazení do tříd je nejrychlejší třídící algoritmus Princip: n Quick sort si označí jeden prvek v poli jako tzv. pivot (první nebo poslední) n zavoláme funkci divide (rozděl), která přeuspořádá pole tak, aby byly zleva prvky menší než pivot, poté následovat pivot sám a za pivotem byly prvky větší, než je on sám n algoritmus rekurzivně zavoláme na levou polovinu pole před pivotem a na pravou polovinu za pivotem (pivot zůstává tam, kde je) n s těmi provedeme to samé, jako s původním polem a takto budeme pokračovat až do chvíle, kdy na vstupu dostaneme jednotkové pole (pole velikosti 1) n po vynoření z rekurze nemusíme dělat už vůbec nic, pole je setříděné

Quick sort n Quick Sort můžeme vylepšit: n Místo vybírání prvního nebo posledního prvku

Quick sort n Quick Sort můžeme vylepšit: n Místo vybírání prvního nebo posledního prvku v poli (pivota), vybereme prvek prostřední, nejlépe náhodně jeden z prostředních, abychom předešli útokům hackerů n Vygenerujeme náhodný prvek v poli (pivota). Tato metoda je časově velmi nenáročná a teoreticky bezpečná vůči útokům n Intro sort - je to Quick sort, který pracuje do max. rychlosti log n, pokud je pomalejší, přepne se na Heap Sort, který pak pracuje se zaručenou rychlostí n log n. Tento vylepšený algoritmus se v praxi využívá velice často

Quick sort n n n Použití: n V praxi je to nejpoužívanější třídící algoritmus

Quick sort n n n Použití: n V praxi je to nejpoužívanější třídící algoritmus n V provedení Intro sort je to nejefektivnější třídící algoritmus. Výhody: n je velmi rychlý (nejrychlejší) Nevýhody: n když víme, který prvek je pivot, dá se lehce napadnout, až server zkolabuje n nechová se dobře na již předtříděných polích n není stabilní (mění pozici prvků které jsou při porovnávání vyhodnoceny jako ekvivalentní) (jde naprogramovat stabilní)

Příklady 2 n Vytvořte pole A o velikosti 10 ti celých čísel prvky zadávejte

Příklady 2 n Vytvořte pole A o velikosti 10 ti celých čísel prvky zadávejte z klávesnice n Vypište prvky pole A n Setřiďte prvky od nejmenšího po největší pomocí třídění Bubble sort n

Příklady 2 n Vytvořte pole A a B o velikosti pěti prvků, prvky do

Příklady 2 n Vytvořte pole A a B o velikosti pěti prvků, prvky do pole načtěte z klávesnice. - Vytvořte pole C, kde prvek C[i] = A[i] * B[i] - Vytvořte pole D, kde jeho prvky jsou dvojnásobné hodnoty pole C

Pěkný zbytek dne

Pěkný zbytek dne