Monte Carlo

Jak s využitím generátoru náhodných čísel spočítat konstantu π?

Postup:

Generujeme opakovaně náhodné souřadnice ve čtverci rxr (viz. obrázek). Pokaždé zkontrolujeme, jestli jsme se trefili dovnitř čtvrtkružnice nebo mimo. Je-li N počet všech pokusů a T je počet těch, kterými jsme se trefili do čtvrtkruhu, spočítáme π jako:
π = 4T/N
Čím větší počet pokusů, tím víc se bude takto vypočítaná hodnota blížit π.

Proč to funguje?

Pravděpodobnost, že se trefíme do čtvrtkruhu, odpovídá povrchu čtvrtkruhu. Pravděpodobnost, že se trefíme do čtverce je 1 (generujeme pouze souřadnice uvnitř čtverce). Poměr plochy čtverec : čtvrtkruh je stejný jako poměr pravděpodobností zásah čtverce : zásah čtvrtkruhu. Poměr počtu pokusů N:T by měl při velkém počtu pokusů vycházet stejně. Plocha čtvrtkruhu při r=1 je rovna π/4. Jednoduchým výpočtem zjistíme, že vzoreček π = 4T/N skutečně platí.

Halda

Jedna ze základních datových struktur, která slouží k uložení libovolné množiny prvků nad kterou je definováno uspořádání a podporuje operace insert, extractMin, removeMin a makeHeap.

Alternativně: nasypeme-li do haldy kupu věcí, které dokážeme nějak porovnávat mezi sebou (například čísla), najdeme na vrcholu haldy vždy to nej (největší/nejmenší - záleží na tom, jak haldu nastavíme)

Na cvičení jsme se zabývali binární haldou. Výše zmíněné operace (insert,extractMin,removeMin a makeHeap) jsme rozebrali na tabuli. Ukázali jsme si, že k jejich implementaci lze s výhodou využít funkce:

  • Up(x) - posledni list haldy posouváme směrem ke kořeni dokud je chyba v uspořádání.
  • Down(x) - kořen haldy posouváme na dno haldy dokud je chyba v uspořádání.
Studijní materiál k binárním haldám je k dispozici leckde na internetu. Ze cvičení by vám mělo být jasné:

  • Jak fungují haldové operace?
  • Jak haldu implementovat v Pascalu?
  • Jak použít haldu k setřídění posloupnosti čísel?
  • Jakou složitost má algoritmus heapsort a proč?

Domácí úkol

Úloha Bucketsort byla zadána za 30 bodů. První termín je atypicky až 1.3. - počítám s tím, že chvíli potrvá, než se ustálí skupiny v CodExu.