Triedenie výberom: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 4: Riadok 4:
 
__TOC__
 
__TOC__
 
==Tento článok je v prvotnom štádiu konštrukcie, zatiaľ je to len hromada myšlienok :)==
 
==Tento článok je v prvotnom štádiu konštrukcie, zatiaľ je to len hromada myšlienok :)==
==Zlučovací algoritmus Heapify==
 
Algoritmus Heapify predstavuje kľúčový podprogram pre triediaci algoritmus Heap sort.  pracuje s dátovou štruktúrou [[Hromada|binárna hromada]]
 
  
Všeobecne platí, že každý kompletný binárny strom môžeme byť vyjadrený pomocou poľa s využitím nasledovných zákonitostí:
+
==Heap Sort==
# Koreň stromu je vždy prvý prvok v poli (v našom prípade prvok na 0-tej pozícii).
+
Algoritmus Heap Sort na triedenie využíva dátovú štruktúru [[Hromada|binárna hromada]], ktorú si vytvorí zo vstupného poľa, ktoré máme utriediť a následne zmazaním všetkých jej prvkov dosiahneme utriedené pole.
# Pre ľubovoľný index <math>i</math> z intervalu <math> \langle 0 \ ; \ \text{dĺžka} - 1 \rangle </math> platia nasledovné rovnice:
+
 
 +
Hromada, ktorú vytvoríme musí spĺňať nasledovné podmienky:
 +
:1. Vrchol hromady je vždy prvý prvok v poli (v našom prípade prvok na 0-tej pozícii).
 +
:2. Pre ľubovoľný prvok uložený na indexe <math>i</math> z intervalu <math> \langle 0 \ ; \ \text{dĺžka} - 1 \rangle </math> platia nasledovné rovnice:
 
:: <math>  
 
:: <math>  
 
\begin{align}
 
\begin{align}
Riadok 16: Riadok 17:
 
\text{rodič} &= \left \lfloor \frac{i - 1}{2} \right \rfloor \quad (\text {okrem} \ i = 0) && (3)
 
\text{rodič} &= \left \lfloor \frac{i - 1}{2} \right \rfloor \quad (\text {okrem} \ i = 0) && (3)
 
\end{align}
 
\end{align}
</math>
+
</math>  
 +
:3. Každý prvok (uzol) v hromade musí mať väčšiu, alebo rovnakú hodnotu ako jeho potomkovia (MAX HEAP - ak triedime pole od vzostupne).
  
Na základe týchto zákonitostí môžeme vytvoriť algoritmus Heapify, vďaka ktorému vieme elegantne uskutočniť operácie s hromadou, ako je vytvorenie hromady z poľa, zmazanie jednotlivých prvkov z hromady, čo sú základné časti triediaceho algoritmu Heap Sort.
+
===Algoritmus Heapify===  
 
+
[[Súbor:Heapify.png|1045px|náhľad|vpravo]]
==Algoritmus Heapify==
+
Heapify je kľúčovým podprogramom triediaceho algoritmu Heap Sort.
 
 
Ak máme i-ty prvok v poli, pričom oba jeho potomkovia tvoria dve samostatné hromady, potom funkcia Heapify zlúči tieto dve hromady do jednej, pričom i-ty prvok bude jej koreňom.
 
  
===Základné časti algoritmu===
+
====Základné časti algoritmu====
 
# Určenie maxima z 2 potomkov i-teho prvku a porovnanie s veľkosťou rodiča.
 
# Určenie maxima z 2 potomkov i-teho prvku a porovnanie s veľkosťou rodiča.
 
# Ak je potomok väčší ako rodič, tak výmena potomka a rodiča.
 
# Ak je potomok väčší ako rodič, tak výmena potomka a rodiča.
 
# Skontrolovanie ovplyvneného potomka (podstromu).
 
# Skontrolovanie ovplyvneného potomka (podstromu).
  
===Slovný opis algoritmu===
+
====Slovný opis algoritmu====
 +
Ak máme i-ty prvok v poli, pričom oba jeho potomkovia tvoria dve samostatné podhromady, potom funkcia Heapify zlúči tieto dve podhromady do jednej hromady, pričom i-ty prvok bude jej vrcholom.
  
===Vlastnosti algoritmu===
+
====Vlastnosti algoritmu====
 
* dátová štruktúra: hromada (pole)
 
* dátová štruktúra: hromada (pole)
 
* časová zložitosť: lineárna <math>O(n)</math>
 
* časová zložitosť: lineárna <math>O(n)</math>
Riadok 37: Riadok 38:
  
  
[[Súbor:Heapify.png|1045px|náhľad|vpravo]]
 
 
==Heap Sort==
 
  
 
==Selection Sort==
 
==Selection Sort==

Verzia zo dňa a času 19:30, 3. apríl 2021

Imbox draft.png
Toto je projekt, na ktorom sa ešte stále pracuje!!

Aj keď sú v tomto dokumente použiteľné informácie, ešte nie je dokončený. Svoje návrhy môžete vyjadriť v diskusii o tejto stránke.

Tento článok je v prvotnom štádiu konštrukcie, zatiaľ je to len hromada myšlienok :)

Heap Sort

Algoritmus Heap Sort na triedenie využíva dátovú štruktúru binárna hromada, ktorú si vytvorí zo vstupného poľa, ktoré máme utriediť a následne zmazaním všetkých jej prvkov dosiahneme utriedené pole.

Hromada, ktorú vytvoríme musí spĺňať nasledovné podmienky:

1. Vrchol hromady je vždy prvý prvok v poli (v našom prípade prvok na 0-tej pozícii).
2. Pre ľubovoľný prvok uložený na indexe [math]i[/math] z intervalu [math] \langle 0 \ ; \ \text{dĺžka} - 1 \rangle [/math] platia nasledovné rovnice:
[math] \begin{align} \text{ľavý potomok} &= 2i + 1 && (1) \\ \text{pravý potomok} &= 2i + 2 && (2) \\ \text{rodič} &= \left \lfloor \frac{i - 1}{2} \right \rfloor \quad (\text {okrem} \ i = 0) && (3) \end{align} [/math]
3. Každý prvok (uzol) v hromade musí mať väčšiu, alebo rovnakú hodnotu ako jeho potomkovia (MAX HEAP - ak triedime pole od vzostupne).

Algoritmus Heapify

Heapify.png

Heapify je kľúčovým podprogramom triediaceho algoritmu Heap Sort.

Základné časti algoritmu

  1. Určenie maxima z 2 potomkov i-teho prvku a porovnanie s veľkosťou rodiča.
  2. Ak je potomok väčší ako rodič, tak výmena potomka a rodiča.
  3. Skontrolovanie ovplyvneného potomka (podstromu).

Slovný opis algoritmu

Ak máme i-ty prvok v poli, pričom oba jeho potomkovia tvoria dve samostatné podhromady, potom funkcia Heapify zlúči tieto dve podhromady do jednej hromady, pričom i-ty prvok bude jej vrcholom.

Vlastnosti algoritmu

  • dátová štruktúra: hromada (pole)
  • časová zložitosť: lineárna [math]O(n)[/math]
  • priestorová zložitosť: konštantná [math]O(1)[/math] pri iteračnej verzii, [math]O(log(N))[/math] pri rekurzívnej verzii


Selection Sort

Odkazy

https://www.tutorialspoint.com/design_and_analysis_of_algorithms/design_and_analysis_of_algorithms_heapify_method.htm