Přidání 12. přednášky z PPA2
This commit is contained in:
parent
36c014ba4c
commit
1e969feb24
1 changed files with 95 additions and 0 deletions
95
KIV PPA2/Prednaska12.md
Normal file
95
KIV PPA2/Prednaska12.md
Normal file
|
@ -0,0 +1,95 @@
|
|||
# Prioritní fronta
|
||||
|
||||
- abstraktní datový typ
|
||||
|
||||
**Žravé (greedy) algoritmy**
|
||||
- zváží všechny možnosti pro další krok
|
||||
- přiřadí cenu
|
||||
- provede krok s nejlepší (největší/nejmenší) cenou
|
||||
+ mohou ale nemusí vést k optimálnímu řešení
|
||||
+ suboptimální: doručování balíků (body, kam musím doručit, ale chci ujet co nejméně km)
|
||||
+ může sloužit jako heuristika
|
||||
- optimální: minimální kostra grafu
|
||||
- spojení měst do jedné počítačové sítě
|
||||
- graf: města a možná spojení
|
||||
- potřeba najít podmnožinu spojující všechna města a mající nejmenší možnou sumu ohodnocení
|
||||
- řešení: najdeme nejkratší nezpracovanou hranu
|
||||
- zkontrolujeme, zda přidáním nevznikne cyklus - jestli ne, přidáme
|
||||
- vznikne optimální řešení
|
||||
- Dijkstrův algoritmus
|
||||
- nejkratší cesta v ohodnoceném grafu
|
||||
- vrcholům přiřazuje dočasné ohodnocení
|
||||
- z dočasně ohodnocených vybere ten s nejnižším ohodnocením
|
||||
- okolním vrcholům se aktualizuje hodnocení
|
||||
+ klíčový problém
|
||||
+ najít v množině dalších možných kroků ten s nejmenší/největší cenou
|
||||
- obecný žravý algoritmus
|
||||
- celkem přidá n prvků
|
||||
- celkem odebere n prvků
|
||||
- obecné pořadí přidávání/odebírání
|
||||
|
||||
**Operace**
|
||||
- přidání prvku (hodnota, priorita)
|
||||
- zjištění nejmenšího/největšího prvku (z hlediska priority)
|
||||
- odebrání nejmenšího/největšího prvku (z hlediska priority)
|
||||
- aktualizace priority prvku
|
||||
+ oproti BST některé operace nevyžadujeme
|
||||
+ vypsání všech prvků v pořadí klíčů (priorit)
|
||||
+ zjištění, zda obsahuje prvek s klíčem (prioritou)
|
||||
+ odebrání libovolného prvku
|
||||
|
||||
**Možnosti implementace**
|
||||
- triviální: dynamickým seřazeným polem
|
||||
- odebírání rychlé
|
||||
- přidávání pomalé: $\Omega(n^2)$
|
||||
- binární vyhledávácí strom (klíčem priorita)
|
||||
- halda
|
||||
- datová struktura
|
||||
- speciální binární strom vytvořený z priorit
|
||||
- vlastnosti haldy
|
||||
- úplný binární strom
|
||||
- priorita ve vrcholu je vždy větší než priorita potomků
|
||||
- po každé operaci je potřeba obnovit vlastnosti haldy
|
||||
|
||||
**Implementace**
|
||||
- uchováváme `int[] values`, `int[] priorities` a `int count`
|
||||
- změna priority hodnoty `value`
|
||||
- nevíme, kde je
|
||||
- musíme to evidovat
|
||||
- `HashMap<ValueType, Integer> position`
|
||||
|
||||
**Složitost**
|
||||
- binární strom je před každou operací úplný
|
||||
- hlouba rekurze je maximálně h
|
||||
- složitost přidání a odebrání je $\Omega(\log_{2}(n))$
|
||||
- obecný žravý algoritmus má složitost $\mathcal O(n \log(n))$
|
||||
|
||||
**Řazení haldou** (Heap sort)
|
||||
- založíme prázdnou haldu
|
||||
- přidáme postupně všechny prvky
|
||||
- postupně odebereme n-krát největší prvek
|
||||
- celkem: $\mathcal O(n \log(n))$
|
||||
+ vnitřní řazení haldou
|
||||
+ haldu umístíme na uvolněná místa pole
|
||||
+ urychlení vytváření haldy
|
||||
+ budeme je vytvářet od konce stromu (od listů)
|
||||
- složitost
|
||||
- nejhorší a očekávaná: $\Theta(n \log(n))$
|
||||
- paměťová: $\Theta(1)$
|
||||
|
||||
# Rekapitulace ADT
|
||||
|
||||
**Přístup k datům pomocí indexů**
|
||||
|
||||
| | vybrání | odebrání | přidání |
|
||||
| ----------------- | ----------- | ---------------------------- | ---------------------------- |
|
||||
| spojová struktura | $\Theta(n)$ | $\Theta(1)$ pokud byl vybrán | $\Theta(1)$ pokud byl vybrán |
|
||||
| dynamické pole | $\Theta(1)$ | $\Theta(n)$ | $\Theta(n)$ |
|
||||
|
||||
**Přístup k datům pomocí klíče**
|
||||
|
||||
| | přidání | odebrání | vybrání | vybrání maxima | odebrání maxima |
|
||||
| ------- | ----------------- | ----------------- | ----------------- | ----------------- | ----------------- |
|
||||
| Tabulka | $\Theta(1)$ | $\Theta(1)$ | $\Theta(1)$ | $\Theta(n)$ | $\Theta(n)$ |
|
||||
| BST | $\Theta(\log(n))$ | $\Theta(\log(n))$ | $\Theta(\log(n))$ | $\Theta(\log(n))$ | $\Theta(\log(n))$ |
|
||||
| Halda | $\Theta(\log(n))$ | N/A | N/A | $\Theta(1)$ | $\Theta(\log(n))$ |
|
Loading…
Reference in a new issue