Thursday, June 23, 2011

SW: Algoritmus

Snad najvseobecnejsia "definicia" algoritmu, ktoru som nasiel je z wikipedie:

"Algoritmus je přesný návod či postup, kterým lze vyřešit daný typ úlohy. Pojem algoritmu se nejčastěji objevuje při programování, kdy se jím myslí teoretický princip řešení problému (oproti přesnému zápisu v konkrétním programovacím jazyce). Obecně se ale algoritmus může objevit v jakémkoli jiném vědeckém odvětví. Jako jistý druh algoritmu se může chápat i např. kuchařský recept."
Wikipedia

"Algoritmus je postupnost krokov, ktora zo vstupnych dat vygeneruje vystupne data, pozadovanych vlastnosti podla zadania problemu. Problem v tomto slova zmysle je uloha, ako zpracovat vstupne data na vystupne data s pozadovanymi vlastnostami. Instancia problemu je problem s konkretnymi datami, potrebnymi pre jeho riesenie." 
prof. Tvrdik 

 Wiki dalej pekne zhrnuje aj vlastnosti algoritmu 
  • Konecnost 
    Algoritmus musi skoncit v konecnom pocte krokov.
  • Obecnost 
    Algoritmus musi byt vseobecne pouzitelny pre ulohy rovnakeho typu, takze neriesi jeden problem, napriklad 3*7, ale riesi sucin dvoch cisel.
  • Determinovanost
    Kazdy krok musi byt mozne vykonat jednoznacne, tak aby sme pre kazdy vstup dostali vzdy rovnake vysledky
     
  • Resultativnost
    Jeho vystupom by malo byt riesenie problemu
  • Elementarnost
    Kroky by mali byt co najjednoduchsie 

Algoritmus je korektny, ak skonci, ak pre kazdu instanciu problemu, skonci v konecnom case so spravnym vystupom. Vravime, ze algoritmus A riesi problem P. 

Sposob navrhu algoritmu zavisi na probleme, ktory riesime. Zvacsa sa pouziva jeden z troch typov pristupu
  • top-down  
    riesenie delime na podproblemy a podproblemy na pod-pod-problemy atd, az kym nedojdeme k natolko elementarnym problemom, ze uz nemame ako delit.

    Pri dynamickom programovni si zapamatame riesenie nadproblemov a ak sa nam hodia na riesenie nizsich problemov, tak ich pouzijeme.
  • bottom-up
    z elementarnych krokov vytvarame prostriedky, ktore nam umoznia zvladnut dany problem
  • kombinacia oboch vyssie uvedenych (?)

                                  "Kazdy algoritmus ma svoju zlozitost"
Marko Berezovsky - the master of teaching 

 Algoritmy mozme rozdelit na 
  • rekurzivne
  • heuristicke
  • probabilisticke
  • hladove
  • geneticke (skutocne typ algoritmu?)
  • pararelne (skutocne typ algoritmu?)
  • este by ma zaujimalo, ako sa volaju tie, ktore nie su ani jedno z uvedenych ...