170 likes | 297 Views
ALGORITMIZ ÁCIA ÚLOH. Triedenie hodnôt. Metódy. Triediace algoritmy sa najčastejšie využívajú v súvislosti so štrukturovanými premennými (poliami). Niekedy je potrebné vyhľadať prvok v poli, prípadne dané pole usporiadať podľa stanoveného kritéria. Budeme sa zaoberať nasledovnými metódami:
E N D
ALGORITMIZÁCIA ÚLOH Triedenie hodnôt
Metódy Triediace algoritmy sa najčastejšie využívajú v súvislosti so štrukturovanými premennými (poliami). Niekedy je potrebné vyhľadať prvok v poli, prípadne dané pole usporiadať podľa stanoveného kritéria. Budeme sa zaoberať nasledovnými metódami: • Vyhľadávanie v neusporiadanom poli • Bublinková metóda • Priehradková metóda Triedenie • Priame vkladanie poľa • Priamy výber • Vyhľadávanie v neusporiadanom poli
Výmena obsahu dvoch premenných Pri triedení usporiadanej množiny je veľmi často potrebné aj prehodiť obsah premenných. Táto výmena sa musí urobiť cez tretiu premennú. pom=a; a=b; b=pom;
Vyhľadávanie v neusporiadanom poli Pre hľadanie v neusporiadanom poli platím, že musíme prejsť všetky jeho hodnoty, aby sme zistili, či sa tam hodnota nachádza, alebo nie. Algoritmus je založený na prehľadávaní poľa a porovnávaní hľadaného prvku s jeho jednotlivými prvkami x[i]. 5106841 166 Príklad 32A. Zostavte program, ktorý bude vyhľadávať v poli požadovaný prvok.
Triedenie:Bublinková metóda – bublesort Je to najjednoduchšia metóda, no vhodná iba pre malú množinu čísel, pretože vykonávanie tohto algoritmu je časovo náročné. Spočíva v porovnávaní dvoch čísel, ktoré sa podľa potreby vymenia a pokračuje ďalším porovnávaním. Hodnoty akoby sa prebublávali na svoje konečné miesto. Ukážka: 9 4 2 7 1 4 2 7 19 2 4 17 9 2 14 7 9 4 9 2 4 2 4 1 2 2 9 4 7 1 4 2 4 7 9 1 7 4 7 4 7 1 9 7 9 7 9 7 9 4 2 7 1 9 2 4 1 7 9 2 1 4 7 9 1 2 4 7 9
Bublinková metóda – bublesort T. j. Porovnávam ak je hodnôt n (5), musím vykonať n – 1 (4) porovnania a to opakujem n – 1 (4) krát. Pôjde teda o dva vnorené cykly so známym počtom opakovaní. Farebne je zvýraznené to číslo, ktoré je porovnávané s nasledujúcim. Táto úvaha vedie na algoritmus vnoreného cyklu, ktorý túto činnosť potrebný počet krát opakuje. Príklad 32B. Zostavte program, ktorý bude triediť podľa veľkosti ľubovoľný počet náhodne zvolených celých čísel.
Triedenie:Priame vkladanie – insertsort Ide o spôsob usporiadania, kedy už pri napĺňaní poľa hodnotami ich priebežne usporiadame. Na obrázku vidíme, akým spôsobom premiestňujeme prvky poľa, aby sme mohli vložiť nový prvok na prázdne miesto. 2 3 8 12 16 18 24 27 15 2 3 8 12 16 16 18 24 27 15 2 3 8 12 15 16 18 24 27 15 Príklad 32C. Zostavte príklad na triedenie insertsort.
Triedenie:Priamy výber – maxsort, minsort Z neusporiadaného poľa vyberáme maximum a vybranú hodnotu premiestnime. Narozdiel od predchádzajúcej metódy táto predpokladá, že pole je už naplnené hodnotami. 4 3 8 1 2 5 6 max = 4 4 >3 4 > 8 teda max = 8 8 > 1 8 > 2 8 >5 8 > 6 Po vykonaní porovnania v cykle vymeníme maximálny a posledný prvok a dostaneme usporiadanie: 4 3 61258
Triedenie:Priamy výber – maxsort, minsort Opäť urobíme porovnanie, no tentokrát bez posledného prvku: 4 3 6 1 2 5 8 max = 4 4 >3 4 > 6teda max = 6 6 > 1 6 > 2 6 >5 Po vykonaní porovnania v cykle vymeníme maximálny a posledný prvok a dostaneme usporiadanie: 4 3 5 1268 O7päť urobíme porovnanie, no tentokrát bez dvoch posledných prvkov: 4 3 5 1268
Triedenie:Priamy výber – maxsort, minsort max = 4 4 >3 4 > 5teda max = 5 5 > 1 5 > 2 Po vykonaní porovnania v cykle vymeníme maximálny a posledný prvok a dostaneme usporiadanie: 4 3 2 15 68 Po ďalších úpravách dostávame: 43 2 1 5 6 81 3 2 4 5 6 8 1 2 3 4 5 6 81 23 4 5 6 8 Príklad 32D. Zostavte príklad na triedenie maxsort.
Triedenie:Priehradková metóda – quicksort Algoritmus spočíva v rozdeľovaní do 10-tich priehradok postupne podľa veľkosti číslice príslušného rádu a opätovnom vyberaní a pretrieďovaní. Pracuje neporovnateľne rýchlejšie ako pri bublinkovej metóde a nie je natoľko závislý od počtu triedených čísel. Je však programátorský náročnejší.
Priehradková metóda – quicksort Ukážka: Majme čísla 541 247 321 785 954 147 543 256 589 672 134 027 650 357 214 232 1. Krok: Zatriedime ich do priehradiek podľa hodnoty číslice nultého rádu: 357 214 027 321 232 134 147 650 541 672 543 954 785 256 247 589 0 1 2 3 4 5 6 7 8 9 2. Krok: Teraz hodnoty vyberieme z priehradiek tak, že čísla naspodku (tie, čo boli do priehradky vložené najskôr) vyberieme najprv. Dostaneme: 650 541 321 672 232 543 954 134 214 785 256 247 147 027 357 589
Priehradková metóda – quicksort 3. Krok: Teraz zaradíme čísla do priehradky podľa číslice prvého rádu: 147 357 247 256 027 134 543 954 589 214 321 232 541 650 682 785 0 1 2 3 4 5 6 7 8 9 4. Krok: Po ich vybratí dostaneme súbor, ktorý je roztriedení na mieste desiatok a jednotiek: 214 321 027 232 134 541 543 247 147 650 954 256 357 682 785 589
Priehradková metóda – quicksort 5. Krok: Teraz zaradíme čísla do priehradky podľa číslice druhého rádu: 256 247 589 147 232 357 543 682 027 134 214 321 541 650 785 954 0 1 2 3 4 5 6 7 8 9 Po ich vybratí dostávame roztriedený súbor: 027 134 147 214 232 247 256 321 357 541 543 589 650 682 785 954
Vyhľadávanie v usporiadanom poli Vyhľadávanie v usporiadanom poli je o to jednoduchšie, že nemusíme prehľadávať celé pole, ale iba jeho časť. Algoritmus je, rovnako ako v neusporiadanom poli, založený na porovnávaní hľadaného prvku s jeho jednotlivými prvkami x[i]. Keďže je pole usporiadané, prehľadávame ho iba kým nenarazíme na hodnotu väčšiu ako je hľadané číslo. Číslo sa v poli nachádza, po jeho nájdení cyklus končí: 2 3 6 10 12 166
Vyhľadávanie v usporiadanom poli Číslo sa v poli nenachádza, po nájdení čísla väčšieho cyklus končí: 2 3 7 10 12 166 Príklad 32E. Zostavte program, ktorý bude vyhľadávať v usporiadanom poli požadovaný prvok.
Vyhľadávanie delením intervalu Predchádzajúca metóda má drobné nevýhody v prípade, že je pole príliš dlhé, prípadne sa prvok nachádza na niektorom jeho konci. To môžeme využiť v algoritme delenia intervalu. Pod pojmom interval budeme rozumieť vzdialenosť medzi prvým a posledným prvkom poľa, teda a[1] až a[n]. Majme pole n = 16 hodnôt: 2345881012162432404651526040 1. delenie 3. 2. delenie Príklad 32F. Zostavte program, ktorý bude podľa algoritmu delenia intervalu vyhľadávať v poli požadovaný prvok.