Třídění

Připomenuli jsme si základní dělení třídících algoritmů na vnitřní (tříděnou posloupnost mají celou dobu načtenou v RAM) a vnější (mezivýsledky si odkládají do souboru na disk).

Poté jsme spočítali složitost třídění spojovým seznamem (minulá domácí úloha).

Binární halda

Byla definována datová struktura známá jako binární halda.

Předvedli jsme si jak se dá v praxi halda použít ke třídění posloupnosti čísel a zkusili jsme si naprogramovat základní operace pro práci s binární haldou reprezentovanou pomocí pole:

  1. up(i: integer): integer; - pro daný index i prohodí prvek haldy s rodičem (je-li rodič větší) a vrátí index rodiče. Pokud nebylo třeba nic prohazovat (rodič je menší, nebo je i index kořene) vrátí -1.
  2. down(i: integer): integer; - pro daný index i prohodí prvek haldy s menším synem (existuje-li) a vrátí jeho index. Jinak vrátí -1.
  3. insert(num: integer); - vloží číslo num na konec haldy a opraví ji pomocí volání up dokud to jde.
  4. removeMin: integer; - vrátí kořen haldy a nahradí ho posledním prvkem haldy. Poté opraví haldu voláním down dokud to jde.

Sedm bodů skoro zadarmo!!

Každý, kdo doladí svou implementaci do funkčního stavu a pošle mi mailem kód programu, který dokáže setřídit tento testovací soubor má nárok na 7 bonusových bodů. Akce trvá do příštího cvičení.

Polská notace

Byla zadána nová úloha do CodExu za 40 bodů. Jde o to vytvořit program, který počítá výrazy zadané v polské notaci.