Uobičajeno se algoritam definiše kao niz
koraka koji jednoznačno i jednostavno vode do rješenja peoblema,
ili dokazuje da rješenje ne postoji.
Evo nekoliko intuitivnih definicija
algoritma:
Algoritam je precizan opis postupaka koji vode željenom
cilju.
Algoritam je uputstvo za obavljanje posla.
Algoritam je skup uputstava koja opisuju kako doći do rešenja
problema.
Algoritam predstavlja skup akcija sa
definisanim redosledom njihovog obavljanja, koji primenjen na
polazni skup podataka, dovodi do traženih rezultata.
Evo i uobičajene neformalne
definicije algoritma: Algoritam je konačan (uređen)
skup strogo definisanoh algoritamskih koraka (pravila) čijom
primjenom na ulazne podatke (i međurezultate) dobijamo rješenje
zadatka poslije konačno mnogo vremena.
Sve poslove koje računar obavlja
izvode se postupno, korak po korak, u konačnom vremenu.
Svaki korak je jasno preciziran, kao i prelazak na svaki
naredni korak. Na kraju postupka, kad računar završi rad
(ukoliko se to uopšte desi, jer moguće je i da se rad
nikada ne završi), dobije se nešto kao rezultat.
Program
je algoritam zapisan na nekom
programskom jeziku. |
|
5 zakona algoritma
Svaki dobar algoritam mora
ispoštovati 5 osnovnih zakonitosti algoritma:
-
Definisanost
(svi koraci moraju biti jasni i
nedvosmisleni)
-
Konačnost
(izvršenje algoritma se mora
obaviti u određenom broju koraka)
-
Posjedovanje
ulaza i izlaza ( moraju se
definisati ulazi kojih može biti: ni jedan,
jedan ili više i izlazi kojih mora biti bar
jedan ili više)
-
Efikasnost
(algoritam se izvršava u razumnom vremenskom
intervalu)
-
Rezultativnost
(algoritam mora dati rješenje problema a ako
nema rješenja onda poruku da rješenje ne
postoji)
|
U procesu programiranja, skup akcija
definisan je mogućnostima računara, odnosno naredbama
programskog jezika koji se koristi, dok se redosled
izvršavanja akcija zadaje pomoću algoritamskih
(programskih) struktura.
Postoji veliki broj različitih
matematičkih formalizacija pojma algoritma. Matematički
se dokazuje da su sve formalizacije algoritama međusobno
ekvivalentne, odnosno svaki algoritam koji se
može predstaviti pomoću jedne od ovih formalizacija,
može se predstaviti i pomoću bilo koje druge.
|
Kad se uz algoritam vezuje pojam obrade
podataka, podrazumjeva se da se podatak prvo učita preko ulazne
jedinice, a ispisuje se na izlaznu jedinicu ili čuva za kasniju
upotrebu. Sačuvani podaci se smatraju dijelom unutrašnjeg stanja
sistema.
Za svaki računarski posao algoritam mora biti
jasno definisan; naveden na način koji podrazumjeva sve moguće
situacije koje se mogu pojaviti.
Znači, svaki uslovni korak se mora sistematično
obraditi, slučaj po slučaj; uslov za svaki slučaj mora biti
jasan i izračunljiv (matematički definisan).
Pretpostavlja se da su instrukcije navedene
jasno, da počinju od
vrha i da teku do dna.
Ova ideja se formalno
opisuje kontrolom toka.
|
Ovo je najuobičajeniji koncept u programiranju
i opisuje postupke na mehanički način. Kod ovakve formalizacije se
unaprijed uzimaju pretpostavke o
imperativnom programiranju. (Tehnike
programiranja su istovjetne s programskim stilovima i direktno su
povezane s pojedinim programskim jezicima. Imperativno programiranje
opisuje računanje kao izraze koji mijenjaju stanje programa. Kao što se
u govornom jeziku zapovijedni način (ili imperativ) koristi za
izražavanje naredbi, tako se imperativni programi mogu posmatrati kao
niz naredbi koje računar treba izvršiti).
Jedinstveno za ovaj koncept je operacija dodjeljivanja, što je
davanje vrijednosti promenljivoj. Ovo
proizilazi iz intuitivnog poimanja memorije kao privremenog skladištenja
odnosno pamćenja. )
Algoritmi se obično razmatraju uz pretpostavku
da u jednom trenutku izvršavaju jednu instrukciju jednog algoritma.
Takvi računari se zovu serijski računari.
Pod algoritamskom (programskom) strukturom podrazumevamo više
koraka (komandi programskog jezika) koji čine jednu celinu. Postoje tri
elementarne algoritamske strukture: Linijska, Razgranata
i Ciklična.
Algoritmi osmišljeni za takvo okruženje se zovu
serijski ili sekvencijalni algoritami, nasuprot paralelnim i
distribuiranim algoritmima.
Paralelni ili distribuirani algoritmi dele
problem u više simetrični ili asimetričnih potproblema i kasnije
sastavljaju rezulata. Za ove algoritme je pored procesorskih ciklusa je
važna brzina komunikacije između procesora. (Distriburanim algoritmima
se nećemo baviti).
Svako polje nauke ima svoje probleme i potrebne
su joj efikasni algoritmi. Srodni problemi se često proučavaju
zajedno. Neki primjeri su algoritmi za pretragu, sortiranje,
spajanje, numeričku analizu, grafove, stringove, računarsku
geometriju, kombinatoriku, mašinsko učenje, kriptografiju,
kompresiju podataka, itd.
|
|