Preštudujte si: Algoritmizácia a neriešiteľné problémy

Portál: amos.ukf.sk
Kurz: Programovanie 1
Kniha: Preštudujte si: Algoritmizácia a neriešiteľné problémy
Vytlačil(a): Hosťovský používateľ
Dátum: štvrtok, 21 novembra 2024, 16:04

Opis

Tu si ukážeme čo isa dajú algoritmizovať "neriešiteľné úlohy"

Algoritmizácia

Riešenie každej úlohy sa skladá z postupnosti logických úsudkov (Aristoteles). Počítačový program sa skladá z množiny príkazov, ktoré riešia zadanú úlohu. Pred písaním programu je potrebné nájsť algoritmus, postup  riešenia úlohy (Postupnosť krokov).  Proces hľadanie algoritmu pre danú úlohu je algoritmizácia úlohy.

Algoritmizácia úlohy má tri etapy:

formulácia - slovné zadanie úlohy ( definovanie vstupov a výstupov úlohy)
analýza - úloha sa zovšeobecňuje, určujú sa podmienky postupu ( popis ako získať z daných vstupov dané výstupy)
zostavenie algoritmu- presné vyjadrenie logiky a postupu riešenia.

Neriešiteľné problémy

Všetky nami doteraz riešené problémy boli algoritmizovateľné – existoval algoritmus, ktorým sme dokázali popísať postup vedúci k vyriešeniu. V praktickom živote možno však veľmi často nájsť prípady, keď nájsť algoritmus na vyriešenie je vzhľadom na obrovské  množstvo vstupných údajov veľmi náročné (zisťovanie viny alebo neviny v právnickej praxi, správanie sa Zeme v najbližších 10.000 rokoch, atď.). Na základe tejto náročnosti sa potom mnohí bádatelia snažia vyhlásiť problémy za nealgoritmizovateľné. Lenže na základe čoho, ak nie vstupných informácií a postupov v ľudskom mozgu sa určí vina alebo nevina, alebo sa predpokladá život na Zemi o 10.000 rokov? Otázka algoritmizovateľnosti v týchto prípadoch nepredstavuje problém, problémom je len množstvo vstupných údajov.
Napriek tomu existuje skupina problémov, ktoré možno označiť pojmom neriešiteľné. Patria sem zvyčajne matematicky vytvorené modely, ktorých správanie je popísané určitými umelými pravidlami.
Ako príklad si môžeme vziať hru na život:

Majme k dispozícii populáciu buniek (štvorčekový papier) s niekoľkými bunkami (krížikmi v políčkach). Bunky sa na základe určitých pravidiel rozmnožujú, na základe iných pravidiel umierajú. Žijú v určitých cykloch - pri prechode do nového cyklu sa každá existujúca bunka skontroluje a buď zahynie, alebo sa rozmnoží alebo sa nezmení.
Pravidlá môžu byť určené nasledovne:
a) ak bunka nemá suseda (bunku v ôsmych okolitých políčkach) – zahynie na samotu,
b) ak bunka susedí s dvoma inými bunkami ako na obrázku, vznikne štvrtá,
c) ak má bunka viac ako piatich susedov – zahynie od hladu.

Samovražednou sa nazýva taká počiatočná populácia, ktorá po určitom počte generácií vymizne.
A neriešiteľným problémom je zistiť, či zadaná populácia je samovražedná.

Túto úlohu možno riešiť tak, že budeme simulovať život populácie, no môže sa stať, že bude trvať veľmi dlho, alebo neskončí. Ak však neskončí v generácii, po ktorú sme ho simulovali, nie je to ešte zárukou, že neskončí o 100 generácií neskôr.

Tento konkrétny proces zisťovania samovražednosti nie je algoritmom, pretože nie sme schopní určiť jeho konečnosť (čo bola jedna z podmienok algoritmu). Môže však existovať iný postup, ktorý môže byť algoritmom, ale my ho nepoznáme. Takže nemožno vyhlásiť, že náš problém nie je algoritmizovateľný.