informatika:maturita:22a
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| informatika:maturita:22a [22. 04. 2015, 14.10] – xmrnustik | informatika:maturita:22a [28. 05. 2020, 15.10] (aktuální) – [Merge sort] xdostal | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| - | ====== | + | ====== |
| + | ===== Třídění vs. řazení ===== | ||
| + | Třídění je uspořádání objektů podle podobných vlastností. Způsob třídění je vždy závislý na oboru, který s těmito objekty pracuje. | ||
| + | Řazení je způsob uspořádání objektů do specifikovaného pořadí. Řazení může být provozováno podle různých kritérií (abecedně, vzestupně, sestupně). | ||
| + | |||
| + | Oba pojmy bývají často zaměňovány. | ||
| + | |||
| + | ===== Složitost algoritmů ===== | ||
| + | |||
| + | Složitost algoritmů (někdy taky asymptotická složitost) je funkce, která vyjadřuje počet elementárních kroků v závislosti na vstupních datech dané funkce. Značí se O. | ||
| + | |||
| + | Možnosti tříd složitostí: | ||
| + | {{: | ||
| + | |||
| + | Rozdíl mezi jednotlivými třídami složitosti se dá jednoduše pochopit na těchto dvou příkladech. Když máme první algoritmus se složitostí O(n) a druhý algoritmus se složitostí O(2n) stačí nám ten druhý spustit na dvakrát rychlejším stroji a rozdíl je smazán. | ||
| + | |||
| + | Pokud však máme první algoritmus se složitostí O(n) a algoritmus se složitostí O(n< | ||
| + | |||
| + | ===== Řadicí algoritmy ===== | ||
| + | |||
| + | ==== Bubble sort ==== | ||
| + | |||
| + | **Princip: | ||
| + | - Dostanu pole. | ||
| + | - Procházím pole, pokud najdu prvek, který je menší než prvek vpravo, prohodím je. | ||
| + | - Opakuji, dokud není pole seřazeno od největšího po nejmenší (zprava doleva). | ||
| + | |||
| + | **Složitost: | ||
| + | |||
| + | **Ukázka algoritmu: | ||
| + | <code javascript> | ||
| + | function bubbleSort(array) { | ||
| + | for (var i = 0; i < array.length - 1; i++) { | ||
| + | for (var j = 0; j < array.length - 1 - i; j++) { | ||
| + | if (array[j] < array[j + 1]) { | ||
| + | var tmp = array[j]; | ||
| + | array[j] = array[j + 1]; | ||
| + | array[j + 1] = tmp; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| < | < | ||
| < | < | ||
| function test() { | function test() { | ||
| - | var x = [1, 5, 6, 7, 8]; | + | var x = [2, 5, 1, 7, 8]; |
| bubbleSort(x); | bubbleSort(x); | ||
| Řádek 13: | Řádek 55: | ||
| function bubbleSort(array) { | function bubbleSort(array) { | ||
| - | var step = 0; | ||
| for (var i = 0; i < array.length - 1; i++) { | for (var i = 0; i < array.length - 1; i++) { | ||
| for (var j = 0; j < array.length - 1 - i; j++) { | for (var j = 0; j < array.length - 1 - i; j++) { | ||
| Řádek 28: | Řádek 69: | ||
| function printStep(array, | function printStep(array, | ||
| - | var container = document.getElementById(" | + | var container = document.getElementById(" |
| container.innerHTML += "Krok " + step + ": " | container.innerHTML += "Krok " + step + ": " | ||
| for (var index = 0; index < array.length; | for (var index = 0; index < array.length; | ||
| Řádek 37: | Řádek 78: | ||
| </ | </ | ||
| - | <div id="container"> | + | <div id="containerbubble"> |
| </ | </ | ||
| <script src=" | <script src=" | ||
| - | <button onclick=" | + | <button onclick=" |
| </ | </ | ||
| + | |||
| + | ==== Insert sort ==== | ||
| + | |||
| + | **Princip: | ||
| + | - Dostanu pole. | ||
| + | - Procházím pole zleva doprava a vždy každý prvek zařadím na místo podle jeho velikosti. | ||
| + | - Dostávám pole seřazené zleva doprava (od největšího po nejmenší). | ||
| + | |||
| + | **Složitost: | ||
| + | |||
| + | **Ukázka algoritmu: | ||
| + | |||
| + | <code javascript> | ||
| + | function insertSort(array) { | ||
| + | var stepCounter = 0; | ||
| + | for (var i = 0; i < array.length - 1; i++) { | ||
| + | var j = i + 1; | ||
| + | var tmp = array[j]; | ||
| + | while (j > 0 && tmp > array[j - 1]) { | ||
| + | array[j] = array[j - 1]; | ||
| + | j--; | ||
| + | array[j] = tmp; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | < | ||
| + | function testInsert() { | ||
| + | |||
| + | var x = [1, 5, 6, 7, 8]; | ||
| + | |||
| + | insertSort(x); | ||
| + | |||
| + | } | ||
| + | |||
| + | |||
| + | function insertSort(array) { | ||
| + | var stepCounter = 0; | ||
| + | for (var i = 0; i < array.length - 1; i++) { | ||
| + | var j = i + 1; | ||
| + | var tmp = array[j]; | ||
| + | while (j > 0 && tmp > array[j - 1]) { | ||
| + | printStepIns(array, | ||
| + | |||
| + | array[j] = array[j - 1]; | ||
| + | j--; | ||
| + | array[j] = tmp; | ||
| + | } | ||
| + | } | ||
| + | printStepIns(array, | ||
| + | } | ||
| + | |||
| + | function printStepIns(array, | ||
| + | var container = document.getElementById(" | ||
| + | container.innerHTML += "Krok " + step + ": " | ||
| + | for (var index = 0; index < array.length; | ||
| + | container.innerHTML += array[index] + " "; | ||
| + | } | ||
| + | container.innerHTML += "< | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | <div id=" | ||
| + | </ | ||
| + | <button onclick=" | ||
| + | </ | ||
| + | |||
| + | ==== Merge sort ==== | ||
| + | https:// | ||
| + | |||
| + | **Princip: | ||
| + | - Dostaneme pole. | ||
| + | - Pole rozdělíme na dvě zhruba stejně velká podpole. | ||
| + | - Získané podpole dále dělíme až na jednoprvkové pole (získáme n jednoprvkových polí). | ||
| + | - Jakmile máme jednoprvková pole spojujeme je dohromady tak, aby byly seřazeny. | ||
| + | - Jakmile máme jenom dvě podmnožiny, | ||
| + | |||
| + | **Složitost: | ||
| + | |||
| + | Ukázka [[https:// | ||
| + | |||
| + | ==== Quick sort ==== | ||
| + | **Princip: | ||
| + | - Dostaneme pole. | ||
| + | - Zvolíme si jeden prvek pole (pivot) a rozdělíme zbytek pole na prvky větší než pivot a na prvky menší než pivot (stejně velké prvky mohou být na libovolné straně). | ||
| + | - Pivota umístíme mezi tyto dvě množiny (pivot je na místě, kam by patřil v seřazeném poli). | ||
| + | - Kroky opakujeme, dokud nemáme všechny prvky seřazeny. | ||
| + | |||
| + | **Složitost: | ||
| + | |||
| + | Ukázka [[http:// | ||
| + | |||
| + | |||
| + | ==== Selection sort ==== | ||
| + | **Princip: | ||
| + | - Dostaneme pole. | ||
| + | - Vyhledáme největší prvek pole a umístíme ho doleva. | ||
| + | - Toto opakujeme, dokud nemáme seřazeno. | ||
| + | |||
| + | **Složitost: | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | ===== Vyhledávací algoritmy ===== | ||
| + | |||
| + | ==== Lineární hledání (sekvenční hledání) ==== | ||
| + | **Princip: | ||
| + | |||
| + | **Složitost: | ||
| + | |||
| + | ==== Binární hledání (metoda půlení intervalů) ==== | ||
| + | **Princip: | ||
| + | - Pole ve kterém se dá použít půlení intervalů, musí být seřazeno (v tomto případě od největšího po nejmenší). | ||
| + | - Podívám se na prostřední prvek pole. | ||
| + | - Pokud je můj hledaný prvek větší opakuji to stejné vpravo, pokud menší tak vlevo. | ||
| + | - Opakuji, dokud nenajdu hledaný prvek. | ||
| + | |||
| + | **Složitost: | ||
| + | |||
| + | ==== Metoda binárního vyhledávacího stromu ==== | ||
| + | |||
| + | **Princip: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **Složitost: | ||
informatika/maturita/22a.1429704657.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
