dr Boba Stojaovć Osove Uloga algortama u račuarstvu Algortm Algortam je strogo defsaa kompjuterska procedura koja uzma vredost l skup vredost, kao ulaz prozvod eku vredost l skup vredost, kao zlaz. Drugm rečma, algortam je z račuskh koraka koj trasformšu ulaz u zlaz. Algortam se takođe može posmatrat kao alat za rešavaje dobro defsah kompjuterskh problema. U opštem slučaju postavka problema defše željeu relacju zmeđu ulaza zlaza. Algortam zapravo defše specfču proceduru za dobjaje relacje zmeđu ulaza zlaza. Uzmmo, a prmer, da je potrebo uredt z brojeva u eopadajuć raspored. Ovaj problem se često javlja u praks dobar je prmer za zučavaje razlčth programerskh tehka alata za aalzu. Evo kako možemo formalo defsat problem uređvaja (sortraja) za brojeva: Ulaz: z od brojeva ( a, a,..., a ) Izlaz: permutacja ( a, a,..., a ) za a ulazu, tako da je spuje uslov a a... a Na prmer, za zadat ulaz z (3, 4, 59, 6, 4, 58), algortam za sortraje daje kao rezultat zlaz z (6, 3, 4, 4, 58, 59). Ovakav ulaz z se azva prmerkom (stacom) problema sortraja. U opštem slučaju, staca problema se sastoj od ulaza (koj zadovoljava ogračeja koja ameće defcja problema) potrebog da se odred rešeje problema. Sortraje je fudametala operacja u kompjuterskm aukama, pa je zbog toga razvje velk broj dobrh algortama za sortraje. Koj je algortam ajbolj u datom slučaju ajvše zavs od broja elemeata koje je potrebo sortrat, voa do koga su elemet već sortra, evetualh ogračeja vredost elemeata vrste uređaja a kome su podac smešte (rada memorja, dsk, traka,...). Za ek algortam kažemo da je korekta ukolko za svak prmerak ulaza daje korekta zlaz. Oda kažemo da korekta algortam rešava dat kompjutersk problem. Ukolko algortam e može u potpuost da se zvrš za eke prmerke ulaza l daje etače rezultate, za jega kažemo da je ekorekta. Iako se to e b očekvalo, ekorekt algortm ekada mogu bt veoma kors, ukolko postoj mogućost kotrole voa greške koju prave. Algortam se može predstavt a razlčte ače: šematsk, a egleskom, srpskm l ekom drugom jezku, koršćejem ekog programskog jezka td. Jed zahtev koj ops mora da spu je da daje precza ops kompjuterske procedure koju je potrebo zvršt. Algortm kao tehka Pretpostavmo da su kompjuter beskoačo brz da je kompjuterska memorja besplata. Da l b malo razloga zučavat algortme. Odgovor je da, ako zbog čega drugog, a oo zbog toga što je potrebo dokazat da je algortam moguće zvršt do kraja to sa tačm rešejem. Ukolko su kompjuter beskoačo brz, svak korekt algortam će dat tačo rešeje. U takvm slučajevma b se mogao zabrat dobro projektova dokumetova algortam, al b ajverovatje bo zabra algortam koj je ajlakše prmet. Naravo, kompjuter mogu bt brz, al e beskoačo brz. Takođe, memorja može bt jefta, al kada besplata. Iz tog razloga su brza zvršavaja algortma kolča memorje koju o korst ogračavajuć faktor. Ov resurs moraju bt mudro koršće, a algortm koj su efkas u pogledu koršćeja vremea prostora u mogome mogu pomoć. Efkasost Razlčt algortm ameje rešavaju jedog stog problema se često mogu zato razlkovat u pogledu jhove efkasost. Ove razlke mogu mat mogo već začaj od razlka u hardveru softveru.
dr Boba Stojaovć Kao jeda od prmera u aredom poglavlju vdećemo dva algortma za sortraje. Prv, pozat kao Iserto sort, troš prblžo c vremea za sortraje elemeata, pr čemu je c kostata koja e zavs od. To praktčo zač da se za sortraje troš vremea proporcoalo (a prmer, za deset puta vše elemeata je potrebo 00 puta vše vremea). Drug algortam, merge sort, troš prblžo c log, pr čemu je c kostata koja e zavs od. Iserto sort občo ma maj kostat faktor od merge sorta ( c < c ). Vdećemo da kostat faktor zato maje utču a vreme zvršavaja od velče ulaza. Dok merge sort ma faktor log u zrazu za vreme zvršavaja, Iserto sort ma faktor, što je zato vše. Iako je Iserto sort občo brž od merge sorta za male velče ulaza, kada velča ulaza postae dovoljo velka, predost merge sorta ( log protv ), će zato prevazć razlku u kostatm faktorma. Bez obzra kolko je c maje od c, uvek će postojat prelom treutak u kome će merge sort postat brž. Razmotrmo kokreta prmer u kome brž kompjuter (kompjuter A) zvršava Iserto sort, dok sporj kompjuter (kompjuter B) zvršava merge sort da svak od jh treba da sortra z od mlo brojeva. Pretpostavmo da kompjuter A zvršava mljardu strukcja u sekud, a kompjuter B zvršava samo deset mloa strukcja u sekud, što zač da je kompjuter A 00 puta brž od kompjutera B. Da razlku učmo još dramatčjom, pretpostavmo da programsk kod za Iserto sort a mašskom jezku ajboljeg programera a svetu zahteva strukcja za sortraje brojeva ( c = ). Sa druge strae, merge sort za kompjuter B je apsao proseča programer koršćejem jezka všeg voa eefkasog kompajlera, tako da rezultujuć kod zahteva 50log strukcja ( c = 50 ). Za sortraje jedog mloa brojeva kompjuter A će potrošt 6 ( ) 0 strukcja 9 0 strukcja/sekud dok kompjuteru B treba = 000 sekud 6 6 50 0 log 0 strukcja 00 sekud 7 0 strukcja/sekud Koršćejem algortma čje vreme zvršavaja raste sporje, čak sa lošm kompajlerom kompjuter B zvršava st zadatak 0 puta brže od kompjutera B. Predost merg sort algortma još vše dolaz do zražaja prlkom sortraja deset mloa brojeva. Dok je Iserto sortu potrebo prblžo.3 daa, merge sort st zadatak zvrš za maje od 0 muta. Geeralo, sa povećajem velče problema povećava se relatva predost merge sorta. Algortm druge tehologje Prethod prmer pokazuje da su algortm, kao kompjutersk hardver, takođe tehologja. Ukupe performase sstema zavse od zbora efkash algortama sto tolko kao od zbora brzog hardvera. Baš kao što je pravlje ekstremo brz apredak u razvoju drugh kompjuterskh tehologja, pravlje je apredak u algortmma. Iako postoje aplkacje koje e zahtevaju eksplcto algortamsk sadržaj a aplkacoom vou (a prmer, jedostave web aplkacje), veća jh zahtevaju zvesta stepe algortamskog sadržaja. Na prmer, posmatrajmo web-bazra servs koj određuje putaju kako doć od jedog mesta do drugog (l GPS uređaj za avgacju). Njegova mplemetacja b se zasvala a brzom hardveru, grafčkom korsčkom okružeju, mrežom ajverovatje ekom orjetacjom objekta. Međutm, ova aplkacja b zahtevala takođe algortme za određee operacje, kao što su proalažeje puta (koršćejem algortma za određvaje ajkraćeg puta), sečeje mapa terpolacju adresa. Sada je jaso da se aplkacje koje e zahtevaju algortamsk sadržaj a aplkatvom vou zapravo oslajaju upravo a moće algortme. Napredovajem račuara o se korste za rešavaje sve većh problema. Kao što smo mogl vdet u prethodom tekstu, sa povećajem velče problema razlka zmeđu algortama postaje sve očgledja. Posedovaje dobrog algortamskog zaja tehka je jeda od karakterstka koja razdvaja vrhuske
dr Boba Stojaovć programere od početka. Koršćejem moderh kompjuterskh tehologja moguće je zvršt određee zadatke bez prevše pozavaja algortama, al sa dobrm zajem algortama se može uradt mogo vše. Aalza dzaj algortama Iserto sort Prv algortam koj ćemo razmatrat, Iserto sort, se korst za rešavaje problema uređvaja za u eopadajuć raspored. Kao što je već pomeuto, ulaz u algortam je z od brojeva, a zlaz permutacja th brojeva takva da važ relacja a a... a. Brojev koje želmo da sortramo se još azvaju ključev. Sve algortme koje budemo aalzral psaćemo u pseudokodu, koj je slča programskm jezcma C Pascal. Za razlku od stvarog koda apsaog u ekom programskom jezku, u pseudokodu se mogu korstt blo kakve metode zražavaja, koje jasje koczje predstavljaju dat algortam. Poekad je delove algortma ajlakše objast a Srpskom jezku, koj se može kombovat sa stvarm programskm jezkom. Druga razlka zmeđu pseudokoda stvarog koda je u tome što pseudokod ajčešće e ulaz u detalje softverskog žejerga u clju što kraćeg jasjeg predstavljaja algortma. Kremo od Iserto sort-a, koj je efkasa algortam za sortraje malog broja elemeata. Iserto sort fukcoše slčo kao što veća ljud sortra karte za graje u ruc. Počjemo sa prazom levom rukom šplom karata okreuth lcem ka stolu. Uzmamo jedu po jedu kartu sa stola umećemo je a odgovarajuće mesto u levoj ruc. Da bsmo ašl odgovarajuće mesto, upoređujemo datu kartu sa svm kartama koje su već u ruc, sa desa a levo, kao što je prkazao a Slc ###. Sve vreme, karte u levoj ruc su sortrae to su zapravo karte sa vrha špla a stolu. Slka ###. Sortraje karata koršćejem Iserto sorta Pseudokod za Iserto sort je predstavlje fukcom IsertoSort, koja kao parametar uzma z A duže, koj je potrebo sortrat. Ulaz z se sortra u mestu, što zač da se vrš samo premeštaje brojeva uutar za A, bez koršćeja dodatog za. Po završetku fukcje, u zu A se alaze brojev sortra u eopadajućem redosledu. 3
dr Boba Stojaovć IsertoSort(A) for j =, duza(a) key = A[j] // Umetaje broja A[j] u sortra podz A[..j ] = j whle >0 ad A[]>key A[+] = A[] = A[+] = key Ivarjate petlje korektost Iserto sorta Na Slc ### je prkazao kako ovaj algortam fukcoše za A = ( 5,,4,6,,3). Ideks j ozačava treutu kartu koja se umeće u ruku. Na početku svake teracje spoljašje for petlje, deksrae sa j, podz A[.. j ] se sastoj od treuto sortrah karata, a elemet Aj [ +.. ] odgovaraju šplu karata koje su još uvek a stolu. Elemet A[.. j ] su zapravo elemet koj su orgalo bl a pozcjama od do j, al sada u sortraom redosledu. Ovu osobu podza A[.. j ] uzmamo kao varjatu petlje (važ u svakoj teracj petlje): Na početku svake teracje for petlje, podz A[.. j ] se sastoj od elemeata koj su orgalo bl u podzu A[.. j ], al u sortraom rasporedu. Slka ###. Operacje pr Iserto sortu a zu A = ( 5,, 4,6,,3). U svakoj teracj spoljašje for petlje, cr pravougaok čuva ključ preuzet z A[ j ], koj se zatm pored sa vredostma u svm pravougaocma sa jegove leve strae. Sve strelce pokazuju vredost koje se pomeraju za po jedo mesto u deso, a cre strelce pokazuju gde se umeće ključ. Ivarjate petlje korstmo da bsmo lakše razumel zašto je ek algortam korekta. Da bsmo dokazal korektost algortma, moramo pokazat tr osobe varjat petlje: Icjalzacja: Tača je pre prve teracje petlje. Održaje: Ukolko je tača pre eke teracje petlje, oa ostaje tača pre sledeće teracje. Okočaje: Kada se petlja okoča, varjata daje korso svojstvo koje pomaže dokazvaju da je algortam korekta. Kada su prve dve osobe spujee, varjata petlje je tača pre početka svake teracje. Kao u slučaju matematčke dukcje, da bsmo dokazal da varjata važ, pokazujemo da varjata važ pre prve teracje, kao osov slučaj, da se varjata održava od teracje do teracje. Za razlku od matematčke dukcje gde se duktv korak korst beskoačo, u ovom slučaju dukcja se prekda kada se završ petlja, što je zadatak treće osobe. Razmotrmo tačost ovh osoba u slučaju Iserto sort-a. Icjalzacja: Pokažmo prvo da varjata petlje važ pre prve teracje, kada je j =. U tom slučaju podz A[.. j ] se sastoj samo od jedog elemeta A [], koj je zapravo orgal elemet A []. Naravo, z od jedog elemeta je svakako sortra, tako da je dokazao da varjata petlje važ pre prve teracje. 4
dr Boba Stojaovć Održaje: Sada treba pokazat da svaka teracja održava tačost varjate petlje. U svakoj teracj se elemet Aj [ ], Aj [ ], Aj [ 3] tako dalje, pomeraju za po jedo mesto u deso, sve dok se e proadje odgovarajuća pozcja za elemet Aj [ ], ako čega se vrš jegovo umetaje u z. Na ovaj ač podz A[.. j ] dalje ostaje sortra, pa samm tm druga osoba varjate petlje važ. Okočaje: Koačo, razmotrmo šta se dešava kada se petlja završ. Kod Iserto sorta, spoljašja for petlja se završava kada j prekorač dužu za, t.j. kada je j = +. Zameom j u defcj varjate sa +, dobjamo da se podz od A[.. ] se sastoj od elemeata koj su orgalo bl u A[.. ], al sada u sortraom redosledu. S obzrom da je A[.. ] ceo z, to zač da je ceo z sortra, pa je samm tm algortam korekta. Aalza algortama Aalza algortma podrazumeva predvđaje koje algortam zahteva. Oo što ajčešće želmo da zmermo je vreme zvršavaja algortma, a ešto ređe su u ptaju resurs kao što je memorja, protok u komukacjama l kompjutersk hardver. Aalzom ekolko algortama pomoću kojh se može rešt određe problem, dolaz se do zaključka koj od jh je ajefkasj u datom slučaju. Aalza algortma Iserto sort Vreme potrebo za zvršavaje fukcje IsertoSort zavs od ulaza, tako da sortraje hljadu brojeva uzma vše vremea ego sortraje tr broja. Štavše, IsertoSort može razlčto trajat u zavsost od toga u kojoj mer su elemet za već sortra. U opštem slučaju vreme potrebo za zvršeje ekog algortma raste sa porastom velče ulaza, pa se ajčešće vreme zvršavaja zražava kao fukcja velče ulaza. Da bsmo to učl, eophodo je da pažljvo defšemo terme "vreme zvršavaja" "velča ulaza". Velča ulaza zavs od problema koj se posmatra. Za moge probleme, kao što su sortraje račuaje dskrete Furjeove trasformacje, ajprrodja mera je broj podataka a ulazu (a prmer, duža za koj se sortra ). Za moge druge probleme, kao što je možeje dva cela broja, ajbolja mera velče ulaza je ukupa broj btova potreba da se ulaz podac predstave u barom oblku. Nekada je pogodje velču ulaza predstavt pomoću dva broja. Na prmer, ukolko je ulaz u ek algortam graf, velča ulaza može bt predstavljea kao broj čvorova broj veza u grafu. Vreme zvršavaja ekog algortma za određe ulaz predstavlja broj prmtvh operacja l koraka koje je potrebo zvršt. U ašm razmatrajma pretpostavćemo da je za svako zvršavaje -te lje u ašem pseudokodu potrebo c vremea, pr čemu je c kostato. Predstavmo pseudokod fukcje IsertoSort zajedo sa vremema potrevm za zvršeje svake od lja pseudokoda. Neka je t j ( j =,3,..., ) broj koj ozačava kolko puta se zvršava provera uslova whle petlje u lja 5 za datu vredost j. Kada se for whle petlja korste a uobčaje ač, proveravaje uslova se zvršava jeda put vše od zvršavaja tela petlje. Kometar u pseudokodu se e zvršavaju, tako da je vreme jhovog zvršavaja 0. 5
dr Boba Stojaovć IsertoSort(A) vreme zvršavaja for j =, duza(a) key = A[j] c - 3 // Umetaje broja A[j] u sortra podz A[..j ] 0-4 = j c 4-5 whle >0 ad A[]>key c 5 6 A[+] = A[] 6 7 = 7 c broj zvršavaja t j c ( t j ) c ( t j ) 8 A[+] = key c 8 - Vreme zvršavaja algortma je jedako sum vremea zvršavaja svake lje. Ukolko je za zvršeje jede lje potrebo c vremea ako se zvršavaje poavlja puta, oda ta lja učestvuje sa c vremea u ukupom vremeu zvršavaja algortma. Da bsmo zračual vreme zvršavaja fukcje IsertoSort, sabramo prozvode koloa koje ozačavaju vremea broj zvršavaja lja, pr čemu dobjamo T c c c c t c t c t c ( ) = + ( ) + 4( ) + 5 j + 6 ( j ) + 7 ( j ) + 8( ) Iako vreme zvršeja algortma prvestveo zavs od velče ulaza, čak za stu velču ulaza vreme zvršeja može se razlkovat u zavsost od podataka koj su uet. Na prmer, kod Iserto sorta ajbolj slučaj se javlja kada je z već sortra. Tada, pošto ma cjalu vredost j, u lj 5 za svako j =,3,..., važ da je A[] key. Samm tm za svako j =,3,..., broj proveravaja uslova uutar whle petlje je t j =, a vreme zvršavaja u ajboljem slučaju ( ) ( ) 4( ) 5( ) 8( ) = ( c + c + c + c + c ) ( c + c + c + c ) T = c+ c + c + c + c = 4 5 8 4 5 8 Ovako zračuato vreme zvršavaja se može zrazt kao a + b, pr čemu su a b kostate koje zavse od c. To zapravo zač da je u ajboljem slučaju vreme zvršavaja Iserto sorta leara fukcja velče ulaza. Ako je z sortra u obrutom redosledu (opadajućem), dobja se ajgor slučaj, pr kome moramo poredt svak elemet Aj [ ] sa svm elemetma u sortraom podzu A[.. j ], tako da je t j = j za svako j =,3,...,. U tom slučaju sume u zrazu za ukupo vreme zvršeja maju sledeć oblk ( + ) j = ( ) ( j ) = a vreme zvršavaja fukcje IsertoSort 6
dr Boba Stojaovć ( ) ( ) ( ) + T( ) = c + c( ) + c4( ) + c5 + c5 + c7 + c8( ) = c5 c6 c7 c5 c6 c7 = + + c c c4 c8 ( c c4 c5 c8) + + + + + + + + Dakle, vreme zvršavaja u ajgorem slučaju se može predstavt kao a + b + c, pr čemu su a, b c kostate koje zavse od c, što je praktčo kvadrata fukcja velče ulaza. Aalza ajgoreg prosečog slučaja U aalz Iserto sorta, razmatral smo ajbolj slučaj, kada je z a ulazu već sortra, al ajgor slučaj, kada je ulaz z sortra u obrutom redosledu. U daljm aalzama razmatraćemo samo vreme zvršavaja pr ajgorem mogućem slučaju, tj. a ajduže vreme zvršavaja za datu velču ulaza. Tr ajbtja razloga za ovakav prstup su: Vreme zvršavaja u ajgorem slučaju je gorja graca vremea zvršavaja za blo koj ulaz. To am garatuje da se algortam u kom slučaju eće zvršavat duže od tog vremea. Za eke algortme ajgor slučaj se javlja veoma često. Na prmer, prlkom pretražvaja eke baze podataka, ajgor slučaj algortma za pretražvaje će se javljat uvek kada u baz e postoj tražea formacja. Proseč slučaj je često prblžo loš sto tolko kao ajgor slučaj. Pretpostavmo da slučajo bramo brojeva prmejujemo Iserto sort. Kolko će trajat određvaje mesta u podzu A[.. j ] gde treba umetut elemet Aj [ ]. U proseku, polova elemeata podza A[.. j ] je maja, a polova veća od Aj [ ]. To zač da se u proseku proverava polova za A[.. j ], što zač da je broj proveravaja tj = j/. Ako zračuamo vreme zvršeja u prosečum slučaju, dobćemo da je oo kvadrata fukcja velče ulaza, baš kao u ajgorem slučaju. Red rasta U aalz Iserto sort algortma, utvrdl smo da se u ajgorem slučaju vreme zvršeja može predstavt kao a + b + c, pr čemu kostate a, b c zavse od c. U pojedostavljeom razmatraju posmatramo samo vodeće člaove (u ovom slučaju a ), s obzrom da su člaov žeg reda relatvo bezačaj. Imajuć u vdu da su za velke ulaze kostat koefcjet zato maje bt od rasta fukcje, takođe goršemo koefcjet spred vodećeg člaa. Sada možemo da kažemo da je vreme zvršeja Θ. Iserto sorta u ajgorem slučaju ( ) Občo smatramo da je algortam efkasj ukolko ma maj red rasta. Zbog zaemarvaja kostath koefcjeata člaova žeg reda, ova pretpostavka može bt pogreša za male velče ulaza. Međutm, za 3 Θ algortma. dovoljo velke ulaze, Θ ( ) algortram će u ajgorem slučaju radt mogo brže od ( ) Rast fukcja Red rasta vremea zvršavaja algortma defsa u prethodoj sekcj am daje jedostava ač za opsvaje efkasost algortma mogućost da zvršmo jegovo poređeje sa drugm alteratvm algortmma. Kada velča ulaza postae dovoljo velka, Merge sort sa svojm vremeom zvršavaja u ajgorem slučaju Θ ( log ) postaje superora u odosu a Iserto sort, čje je vreme zvršavaja u ajgorem slučaju Θ ( ). Iako poekad možemo zračuat tačo vreme zvršavaja ekog algortma (kao što je to urađeo za Iserto sort), to ajčešće je vredo truda. Za dovoljo velke ulaze, kostate člaov žeg reda se mogu zaemart u odosu a čla ajvšeg reda. Kada posmatramo samo dovoljo velke ulaze, da bsmo odredl red rasta vremea zvršavaja, m zapravo proučavamo asmptotsku 7
dr Boba Stojaovć efkasost algortama. U opštem slučaju, algortam koj ma veću asmptotsku efkasost je ajbolj zbor u svm slučajevma osm za veoma male ulaze. Asmptotska otacja U praks se ajčešće korste Θ, O Ω otacja za zražavaje kompleksost algortama. U astavku ćemo razmotrt samo ajbtje karakterstke O-otacje. O-otacja Kada posmatramo samo gorju asmptotsku gracu, korstmo O-otacju. Za datu fukcju g ( ), sa O( g( )) ozačavamo skup fukcja ( ) kostate c 0 takve da važ 0 f ( ) c g( ) za svako 0. O-otacja am zapravo daje gorju gracu fukcje f ( ), kao što je prkazao a Slc ###. f, ukolko postoje poztve Slka ###. O-otacja daje gorju gracu fukcje u odosu a kostata faktor Ukolko fukcja f ( ) prpada skupu ( ( )) vredost fukcje f ( ) maja l jedaka vredost fukcje ( ) Prmer ( ),3, 5000,5 + 3,... O O g, oda to zač da je za sve vredost deso od 0, g pomožee kostatm faktorom c. Koršćejem O-otacje, vreme zvršavaja algortma često možemo odredt jedostavm posmatrajem strukture algortma. Na prmer, dvostruka ugeždea petlja u Iserto sort algortmu, avode a zaključak da je u ajgorem slučaju vreme zvršeja O( ). Kao što smo mogl vdet u prethodoj sekcj, vreme zvršavaja Iserto sort algortma u slučaju kada je ulaz z već sortra je O( ). Međutm, s obzrom da vreme zvršavaja zavs od ulaza u algortam, kada kažemo da je "vreme zvršavaja O( ) ", to zač da postoj fukcja f ( ) koja prpada skupu O( ), takva da za blo koju vredost, vreme zvršavaja za taj ulaz će bt maje od ( ) f. Zato kažemo da je u ajgorem slučaju vreme zvršavaja ( ) O. 8
dr Boba Stojaovć Pored stepeh fukcja, kompleksost algortama može bt zražea koršćejem drugh matematčkh fukcja, kao što su ekspoecoale logartmaske. Na Slc ### je prkaza odos brza rasta pojedh fukcja pr povećaju velče ulaza. Slka ###. Odos brza rasta fukcja 9