Složitost algoritmu

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Složitost jako míra pro srovnání algoritmů: Měření složitosti jako samostatná kapitola.)
m (Asymptotická složitost: Oprava vzhledu)
Řádka 31: Řádka 31:
 
*Jakým způsobem se složitost algoritmu (počet operací) mění při změně objemu vstupních dat.
 
*Jakým způsobem se složitost algoritmu (počet operací) mění při změně objemu vstupních dat.
 
*Zapisujeme <code>O(f(N))</code>
 
*Zapisujeme <code>O(f(N))</code>
**N... velikost dat
+
** <code>N</code>... velikost dat
**f(N)... funkce, jejímž růstem lze limitovat růst počtu operací
+
** <code>f(N)</code>... funkce, jejímž růstem lze limitovat růst počtu operací
**Pokud je velikost vstupu N, pak je složitost limitována funkcí <code>A+B.f(N)</code>
+
**Pokud je velikost vstupu <code>N</code>, pak je složitost limitována funkcí: <code>y = A+B.f(N)</code>
  
 
;Příklady růstu počtu operací
 
;Příklady růstu počtu operací
*O(N) &mdash; lineární
+
* <code>O(N)</code> &mdash; lineární
 
*Lepší než lineární
 
*Lepší než lineární
**O(log(N))
+
** <code>O(log(N))</code>
**O(sqrt(N))
+
** <code>O(sqrt(N))</code>
*O(N.log(N))
+
* <code>O(N.log(N))</code>
*O(N<sup>2</sup>) &mdash; kvadratický
+
* <code>O(N<sup>2</sup>)</code> &mdash; kvadratický
*O(N<sup>3</sup>) &mdash; kubický
+
* <code>O(N<sup>3</sup>)</code> &mdash; kubický
 
*Polynomiální
 
*Polynomiální
**roste jako libovolný polynom (omezen O(N<sup>i</sup>), kde i je lib. konstanta).
+
**roste jako libovolný polynom (omezen <code>O(N<sup>i</sup>)</code>, kde <code>i</code> je lib. konstanta).
*O(2<sup>N</sup>) &mdash; exponenciální
+
* <code>O(2<sup>N</sup>)</code> &mdash; exponenciální
 
** Viz například: [http://cs.wikipedia.org/wiki/Hanojsk%C3%A9_v%C4%9B%C5%BEe Hanoiské věže].
 
** Viz například: [http://cs.wikipedia.org/wiki/Hanojsk%C3%A9_v%C4%9B%C5%BEe Hanoiské věže].
  
; Úkol &mdash; Navrhněte algoritmus a odhadněte složitost
+
<div class="Priklad">Úkol: Navrhněte algoritmus a odhadněte složitost
 
* Hledání maxima
 
* Hledání maxima
 +
</div>
  
 
== Související pojmy ==
 
== Související pojmy ==

Verze z 25. 9. 2014, 10:29


Obsah

Složitost jako míra pro srovnání algoritmů

Hledáme nástroje pro porovnání efektivity algoritmů.

Rychlejší algoritmus → lepší algoritmus!
Problém — čas je ovlivněn


Měření složitosti

  1. Neměříme čas, ale počet operací!
    • Tím omezíme vliv konkrétního HW.
  2. Nepočítáme všechny dílčí operace!
    • Obvykle počítáme pouze „významné“ (časově náročné) operace (počet porovnání, počet přístupů na disk).
    • Tím eliminujeme vliv použitého překladače, knihoven, jazyka, procesorové architektury,...
  3. Zajímají nás velká data, řádový růst!
  4. Zajímá nás maximální nebo průměrná složitost!
    • Tím eliminujeme vliv konkrétního zadání.

Asymptotická složitost

Příklady růstu počtu operací
Úkol: Navrhněte algoritmus a odhadněte složitost
  • Hledání maxima

Související pojmy

Složitost problému
Maximální × průměrná složitost
Paměťová × časová složitost

Viz také

Zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje