Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Algoritmizace a programování Pole – Příklady 3. Třídění polí V poli máme prvky a chceme je setřídit: V poli máme prvky a chceme je setřídit: od nejmenšího.

Podobné prezentace


Prezentace na téma: "Algoritmizace a programování Pole – Příklady 3. Třídění polí V poli máme prvky a chceme je setřídit: V poli máme prvky a chceme je setřídit: od nejmenšího."— Transkript prezentace:

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

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

3 Bubble sort Bubble sort jinak známý jako řazení záměnou, je nejjednodušší, ale nejpomalejší třídící algoritmus 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 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 Používá se spíše pro výukové účely

4 Bubble sort Princip: Princip: 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 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: Bubble Sort můžeme vylepšit: Po každém projetí všech prvků v poli si můžeme dovolit postupně zkracovat (zprava) o 1 prvek a poslední úplně vypustit Po každém projetí všech prvků v poli si můžeme dovolit postupně zkracovat (zprava) o 1 prvek a poslední úplně vypustit 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 s přetřásáním (Shaker sort nebo Cocktail sort), založený na dvou Bubble sortech - jeden zleva doprava, druhý zprava doleva

5 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]=pole[j+1] pole[j+1]=pomocna print ("Setříděné pole:",pole) http://www.cs.oswego.edu/~mohammad/classes/csc241/samp les/sort/Sort2-E.html http://www.cs.oswego.edu/~mohammad/classes/csc241/samp les/sort/Sort2-E.html

6 Bubble sort – postup pro hodnoty 10,9,8 ijpole[j]pole[j+1]pomocnapole[j]pole[j+1] 1 0109 9 1 1 8 8 1 2 xx x 2 098989 2 19 x9 2 2 xx x 3 089x89 3 19 x9 3 2 xx x

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

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

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

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

11 Merge sort 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ů 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é V problému třídění se často chceme dostat až k poli velikosti 1, které považujeme automaticky za setříděné

12 Merge sort Princip: Princip: 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é 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é Na začátku samozřejmě máme jen jedno pole a to setříděné není Na začátku samozřejmě máme jen jedno pole a to setříděné není 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á 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á 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é 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é

13 Merge sort Použití: Použití: 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. 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: Výhody: je poměrně rychlý (3.nejrychlejší) je poměrně rychlý (3.nejrychlejší) stabilní (nemění pozici prvků které jsou při porovnávání vyhodnoceny jako ekvivalentní) stabilní (nemění pozici prvků které jsou při porovnávání vyhodnoceny jako ekvivalentní) Nevýhody: Nevýhody: pro svou práci potřebuje další pole o velikosti n (kde si poznačí indexy) pro svou práci potřebuje další pole o velikosti n (kde si poznačí indexy) je nejpomalejší pro velmi malá pole (min. asi 25 prvků) je nejpomalejší pro velmi malá pole (min. asi 25 prvků)

14 Heap sort Heap Sort nebo-li řazení haldou je jeden z nejlepších obecných algoritmů řazení, založených na porovnávání prvků Heap Sort nebo-li řazení haldou je jeden z nejlepších obecných algoritmů řazení, založených na porovnávání prvků Princip: Princip: 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 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 Po začlenění všech maxim na konec máme pole setříděné Po začlenění všech maxim na konec máme pole setřídě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 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 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 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 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 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 Představit si to můžeme jako, rodokmen, kde seřazujeme podle vztahů Představit si to můžeme jako, rodokmen, kde seřazujeme podle vztahů

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

16 Quick sort Quick Sort nebo-li rychlé (rekurzivní) řazení do tříd je nejrychlejší třídící algoritmus Quick Sort nebo-li rychlé (rekurzivní) řazení do tříd je nejrychlejší třídící algoritmus Princip: Princip: Quick sort si označí jeden prvek v poli jako tzv. pivot (první nebo poslední) Quick sort si označí jeden prvek v poli jako tzv. pivot (první nebo poslední) 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 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 algoritmus rekurzivně zavoláme na levou polovinu pole před pivotem a na pravou polovinu za pivotem (pivot zůstává tam, kde je) algoritmus rekurzivně zavoláme na levou polovinu pole před pivotem a na pravou polovinu za pivotem (pivot zůstává tam, kde je) 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) 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) po vynoření z rekurze nemusíme dělat už vůbec nic, pole je setříděné po vynoření z rekurze nemusíme dělat už vůbec nic, pole je setříděné

17 Quick sort Quick Sort můžeme vylepšit: Quick Sort můžeme vylepšit: 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ů 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ů Vygenerujeme náhodný prvek v poli (pivota). Tato metoda je časově velmi nenáročná a teoreticky bezpečná vůči útokům Vygenerujeme náhodný prvek v poli (pivota). Tato metoda je časově velmi nenáročná a teoreticky bezpečná vůči útokům 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 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

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

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

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

21 Pěkný zbytek dne Pěkný zbytek dne


Stáhnout ppt "Algoritmizace a programování Pole – Příklady 3. Třídění polí V poli máme prvky a chceme je setřídit: V poli máme prvky a chceme je setřídit: od nejmenšího."

Podobné prezentace


Reklamy Google