53 lines
2.3 KiB
Markdown
53 lines
2.3 KiB
Markdown
|
# Ch. 1.2: Procedures and the Processes They Generate
|
||
|
|
||
|
## Vzorci evolucije procesov
|
||
|
|
||
|
procedura: vzorec lokalne evolucije računalniškega procesa
|
||
|
|
||
|
Kaj pa lahko rečemo o globalnih vzorcih?
|
||
|
|
||
|
### 1.2.1 Linearna rekurzija in iteracija
|
||
|
|
||
|
razlika med rekurzivno proceduro in rekurzivnim procesom:
|
||
|
|
||
|
* rekurzivna procedura v Lisp-u odraža princip, da se pri klicanju procedure sklicuje na samo proceduro
|
||
|
* rekurziven proces opisuje obliko evolucije računskega postopka
|
||
|
|
||
|
Rekurzivni procesi:
|
||
|
|
||
|
* procedura kliče samo sebe, dokler ni dosežen robni pogoj (aplikativni red)
|
||
|
* pri tem mora interpreter v spominu ohranjati zapis o potrebnih izvedbah procedure --> zaradi tega prostorska zahtevnost O(n)
|
||
|
* to se imenuje veriga preloženih operacij (? chain of deferred operations)
|
||
|
* ko se funkcija kliče na vhodu, ki ustreza robnim pogojem, se nato v nasprotnem vrstnem redu funkcija aplicira na vhodno vrednost in izvede --> časovna zahtevnost O(n)
|
||
|
* klasičen primer: fakulteta $$n!$$; rekurzivna definicija: $$n! = n(n-1)!$$
|
||
|
|
||
|
Iterativni procesi:
|
||
|
|
||
|
* stanje procedure je enolično opisano na vsakem koraku: spremenljivke stanja
|
||
|
* poleg tega obstaja enoličen predpis za pripisovanje novih (posodobljenih) vrednosti spremenljivkam stanja po vsaki izvedbi procedure
|
||
|
* prostorska zahtevnost je tako O(1) - stanje je vsakič shranjeno v istem številu spremenljivk
|
||
|
* časovna zahtevnost je O(n)
|
||
|
|
||
|
Razlike:
|
||
|
|
||
|
|
||
|
* tudi pri iterativnih procesih procedura kliče sama sebe, vendar je razlika v postopku izvajanja; medtem ko se mora rekurzivni proces zaradi pomnenja verige preloženih operacij izvesti v celoti, lahko iterativni proces na katerikoli točki prekinemo in nato nadaljujemo na podlagi vrednosti spremenljivk stanja ob prekinitvi
|
||
|
* v tem primeru govorimo o repni rekurziji (slovarček); zanke (while, for, ...) v ostalih jezikih so tako samo posebne sintaktične oblike repne rekurzije
|
||
|
|
||
|
|
||
|
### 1.2.2 Drevesna rekurzija
|
||
|
|
||
|
* pri linearni rekurziji vsak korak vsebuje en klic procedure
|
||
|
* če se na posameznem koraku procedura kliče večkrat (korak je odvisen od večih prejšnjih vrednosti), je struktura procesa drevesna
|
||
|
* eksponentna časovna zahtevnost: O(exp(n))
|
||
|
* linearna prostorska zahtevnost: O(n) - v spominu moramo na vsakem koraku ohraniti samo vrednosti v vozliščih na prejšnjem nivoju globine drevesa
|
||
|
* klasični primer: Fibonaccijeva števila; $$Fib(n) = Fib(n-1) + Fib(n-2)$$
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|