Pogled u povijest razvoja algoritama

Similar documents
Hornerov algoritam i primjene

Algoritam za množenje ulančanih matrica. Alen Kosanović Prirodoslovno-matematički fakultet Matematički odsjek

ZANIMLJIV NAČIN IZRAČUNAVANJA NEKIH GRANIČNIH VRIJEDNOSTI FUNKCIJA. Šefket Arslanagić, Sarajevo, BiH

TEORIJA SKUPOVA Zadaci

Projektovanje paralelnih algoritama II

Metode izračunavanja determinanti matrica n-tog reda

Šime Šuljić. Funkcije. Zadavanje funkcije i područje definicije. š2004š 1

Fibonaccijev brojevni sustav

Mathcad sa algoritmima

Slika 1. Slika 2. Da ne bismo stalno izbacivali elemente iz skupa, mi ćemo napraviti još jedan niz markirano, gde će

Maja Antolović Algoritmi u teoriji brojeva

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku DIOFANTSKE JEDNADŽBE

Pellova jednadžba. Pell s equation

Prsten cijelih brojeva

Mersenneovi i savršeni brojevi

Pitagorine trojke. Uvod

pretraživanje teksta Knuth-Morris-Pratt algoritam

Quasi-Newtonove metode

Matrične dekompozicije i primjene

Vedska matematika. Marija Miloloža

Karakteri konačnih Abelovih grupa

Ivan Soldo. Sažetak. U članku se analiziraju različiti načini množenja matrica. Svaki od njih ilustriran je primjerom.

Geometrijski smisao rješenja sustava od tri linearne jednadžbe s tri nepoznanice

Ariana Trstenjak Kvadratne forme

Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku

PRIPADNOST RJEŠENJA KVADRATNE JEDNAČINE DANOM INTERVALU

Nilpotentni operatori i matrice

SITO POLJA BROJEVA. Dario Maltarski PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: Doc. dr. sc.

KVADRATNE INTERPOLACIJSKE METODE ZA JEDNODIMENZIONALNU BEZUVJETNU LOKALNU OPTIMIZACIJU 1

Funkcijske jednadºbe

KLASIFIKACIJA NAIVNI BAJES. NIKOLA MILIKIĆ URL:

Tina Drašinac. Cramerovo pravilo. Završni rad

ALGORITAM FAKTORIZACIJE GNFS

Fajl koji je korišćen može se naći na

Mirela Nogolica Norme Završni rad

Linearno programiranje i primjene

HRVATSKA MATEMATIČKA OLIMPIJADA

Red veze za benzen. Slika 1.

Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku. Sveučilišni preddiplomski studij matematike

Metode praćenja planova

Uvod u relacione baze podataka

KRITERIJI KOMPLEKSNOSTI ZA K-MEANS ALGORITAM

LINEARNI MODELI STATISTIČKI PRAKTIKUM 2 2. VJEŽBE

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku

ALGORITMI PODIJELI PA VLADAJ

NIZOVI I REDOVI FUNKCIJA

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Preddiplomski sveučilišni studij matematike. Završni rad. Tema : Vedska matematika

O aksiomu izbora, cipelama i čarapama

Kvaternioni i kvaternionsko rješenje kvadratne jednadžbe

Formule za udaljenost točke do pravca u ravnini, u smislu lp - udaljenosti math.e Vol 28.

Položaj nultočaka polinoma

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike. Mirjana Mikec.

BROJEVNE KONGRUENCIJE

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike. Sortiranje u linearnom vremenu

ALGORITMI ZA ISPITIVANJE DJELJIVOSTI

Matrice u Maple-u. Upisivanje matrica

Uvod u numericku matematiku

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Preddiplomski studij matematike. Egipatska matematika

Matematika (PITUP) Prof.dr.sc. Blaženka Divjak. Matematika (PITUP) FOI, Varaždin

Teorem o reziduumima i primjene. Završni rad

Simetrične matrice, kvadratne forme i matrične norme

Zanimljive rekurzije

Osobine metode rezolucije: zaustavlja se, pouzdanost i kompletnost. Iskazna logika 4

Sortiranje podataka. Ključne riječi: algoritmi za sortiranje, merge-sort, rekurzivni algoritmi. Data sorting

Rekurzivni algoritmi POGLAVLJE Algoritmi s rekurzijama

Krivulja središta i krivulja fokusa u pramenu konika. konika zadanom pomoću dviju dvostrukih točaka u izotropnoj ravnini

PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Marina Zrno KOMUTATIVNI PRSTENI. Diplomski rad. Voditelj rada: prof.dr.sc.

Numeričke metode u ekonomiji Dr. sc. Josip Matejaš, EFZG

Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike. Ivana Oreški REKURZIJE.

U čemu je snaga suvremene algebre?

Matea Ugrica. Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni diplomski studij matematike i računarstva

ZANIMLJIVI ALGEBARSKI ZADACI SA BROJEM 2013 (Interesting algebraic problems with number 2013)

Iskazna logika 1. Matematička logika u računarstvu. oktobar 2012

Matrice traga nula math.e Vol. 26. math.e. Hrvatski matematički elektronički časopis. Matrice traga nula. komutator linearna algebra. Sažetak.

ALGORITMI. Pojam algoritma Blok dijagram

Vektori u ravnini i prostoru. Rudolf Scitovski, Ivan Vazler. 10. svibnja Uvod 1

Povijest rješavanja algebarskih

Harmonijski brojevi. Uvod

ANALYSIS OF THE RELIABILITY OF THE "ALTERNATOR- ALTERNATOR BELT" SYSTEM

Mehurasto sortiranje Brzo sortiranje Sortiranje učešljavanjem Sortiranje umetanjem. Overviev Problemi pretraživanja Heš tabele.

Iterativne metode za rješavanje linearnih sustava

A B A B. Logičke operacije koje još često upotrebljavamo su implikacija ( ) i ekvivalencija A B A B A B

MATEMATIKA PRIJE PITAGORE

Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku. Velibor Gojić. Blok dizajni. Diplomski rad. Osijek, 2014.

ELIPTIČKE KRIVULJE I KRIPTIRANJE. Zdravko Musulin PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad

Metoda parcijalnih najmanjih kvadrata: Regresijski model

PRIMJENA LINEARNOGA PROGRAMIRANJA NA PROBLEME PROMIDŽBE. Diplomski rad

1 Pogreške Vrste pogrešaka Pogreške zaokruživanja Pogreške nastale zbog nepreciznosti ulaznih podataka

DES I AES. Ivan Nad PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: doc.dr.sc.

Sveučilište J.J. Strossmayera u Osijeku. Odjel za matematiku. David Komesarović. Mooreovi grafovi. Diplomski rad. Osijek, 2017.

Ksenija Doroslovački KOMBINATORIKA INTERPRETIRANA FUNKCIJAMA I NJIHOVIM OSOBINAMA MASTER RAD. NOVI SAD jun 2008

UPUTE ZA OBLIKOVANJE DIPLOMSKOG RADA

Uvod u analizu (M3-02) 05., 07. i 12. XI dr Nenad Teofanov. principle) ili Dirihleov princip (engl. Dirichlet box principle).

ODREĐIVANJE DINAMIČKOG ODZIVA MEHANIČKOG SUSTAVA METODOM RUNGE-KUTTA

PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK BINARNI POLINOMI. Diplomski rad. Voditelj rada: doc. dr. sc. Goranka Nogo. Zagreb, 2017.

Turingovi strojevi Opis Turingovog stroja Odluµcivost logike prvog reda. Lipanj Odluµcivost i izraµcunljivost

Nelder Meadova metoda: lokalna metoda direktne bezuvjetne optimizacije

Konformno preslikavanje i Möbiusova transformacija. Završni rad

Sveučilišni studijski centar za stručne studije. Zavod za matematiku i fiziku. Uvod u Matlab. Verzija 1.1

Transcription:

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Tea Fijačko Pogled u povijest razvoja algoritama Diplomski rad Osijek, 2011.

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Tea Fijačko Pogled u povijest razvoja algoritama Diplomski rad Mentor: doc. dr. sc. Tomislav Marošević Osijek, 2011.

Sadržaj 1. Uvod 4 2. O pojmu algoritma 5 2.1 Definicija algoritma............................. 5 2.2 Karakterizacija algoritma.......................... 6. Razvoj sustava za zapisivanje brojeva 7.1 Zapis brojeva u starim kulturama..................... 7.1.1 Egipatski brojevni sustav...................... 7.1.2 Babilonski brojevni sustav..................... 8.1. Grčki brojevni sustav........................ 9.1.4 Rimski brojevni sustav....................... 10.1.5 Indijsko-arapski brojevni sustav.................. 11.2 Euklidov algoritam............................. 12. Otkriće prostih brojeva........................... 15 4. Kratak pregled povijesti razvoja računala 18 4.1 Mehanička pomagala za računanje..................... 18 4.2 Elektronička računala i razvoj preciznog zapisa algoritama....... 22 4.2.1 Vrste algoritama u računarstvu.................. 25 5. Neki poznati algoritmi u matematici 27 5.1 Razvoj egipatskog algoritma množenja.................. 27 5.2 Hornerov algoritam............................. 0 5. Gaussova metoda eliminacije za sustave linearnih jednadžbi....... 4 5.4 Neki značajni algoritmi u drugoj polovini XX. stoljeća......... 6 5.4.1 Monte Carlo metoda (Metropolis algoritam)........... 6 5.4.2 Simplex algoritam.......................... 6 5.4. Aproksimacije iz Krylovljevih potprostora............ 8 5.4.4 LU faktorizacija........................... 9 5.4.5 FORTRAN kompajler....................... 9 5.4.6 QR faktorizacija.......................... 9 5.4.7 QuickSort.............................. 42 Sažetak 4 Summary 44 Literatura 46 Životopis 47

1. Uvod U svakodnevnom životu često postupamo po algoritmima, iako toga nismo niti svjesni. Algoritmi u širem smislu su temelj našeg djelovanja i stvaranja. Ako želimo sastaviti dječju igračku, skuhati omiljeno jelo ili učiniti nešto slično, postupit ćemo po odredenom algoritmu. Iako korisnici algoritama ne moraju biti matematičari, sami algoritmi su matematički objekti. Pod pojmom algoritam podrazumijevamo konačan skup elementarnih operacija i postupaka pomoću kojih se rješavaju svi zadaci istog tipa i to za konačno vrijeme. Obzirom da je ova tema zaista opširna, u radu su navedena samo najbitnija saznanja i dostignuća. U drugom poglavlju je objašnjen pojam i karakterizacija algoritma. U poglavlju. dan je pregled razvoja brojevnih sustava u drevnim kulturama sve do indijsko-arapskog dekadskog brojevnog sustava. Pored toga, u ovom poglavlju naveden je i objašnjen Euklidov algoritam. Zatim, u četvrtom poglavlju promatramo ukratko razvoj računala jer je to dovelo do potrebe za tvorbom novih numeričkih algoritama. Takoder, ovdje su navedeni i primjeri algoritama u računarstvu. U petom poglavlju razmatra se nekoliko algoritama koji spadaju u najpoznatije matematičke algoritme. Pored toga, ovdje se nalazi i kratak opis najznačajnijih algoritama XX. stoljeća. 4

2. O pojmu algoritma Riječ algoritam potječe od perzijskog matematičara al-khwarizmija iz 9. stoljeća (puno ime u engleskom prijevodu glasi Muhammed ibn Musa al-khwarizmi). Napisao je knjigu u kojoj je opisao postupke za računanje u indijskom brojevnom sustavu. Izvorno izdanje knjige, napisano na arapskom jeziku, nije sačuvano, a latinski se prijevod proširio Europom pod naslovom Algoritmi de numero Indorum ( Al-Khwarizmi o indijskim brojevima ). Prema tom naslovu postupke za sustavno rješavanje problema danas nazivamo algoritmima. Slika 1: Muhammed ibn Musa al-khwarizmi 2.1 Definicija algoritma Pod pojmom algoritam podrazumijevamo konačan skup elementarnih operacija i postupaka pomoću kojih se rješavaju svi zadaci istog tipa i to za konačno vrijeme. Algoritam, kao postupak za dobivanje rješenja, sastoji se od konačnog niza koraka tzv. instrukcija, naredbi ili operacija, koje treba izvršiti (izvesti) da bi se dobilo rješenje. Algoritam je elementarni matematički pojam (kao što su npr. točka, pravac, skup itd.) i zato ga nije moguće definirati pomoću drugih jednostavnijih pojmova 1. Klasični primjeri algoritma su, primjerice, Euklidov algoritam (za nalaženje najveće zajedničke mjere dva cijela broja), kao prvi formalni algoritam u povijesti i Hornerov algoritam za izračunavanje vrijednosti polinoma. 1 Š. Znam i dr., Pogled u povijest matematike, Tehnička knjiga Zagreb, 1986. 5

2.2 Karakterizacija algoritma Algoritam možemo karakterizirati pomoću njegovih svojstava. Osnovna svojstva algoritma su: 1. Elementarnost: algoritam se sastoji od konačnog broja jednostavnih, lako ostvarivih radnji (koraka algoritma). 2. Determiniranost: nakon izvršavanja svakog pojedinog koraka algoritma, možemo zaključiti je li realizacija algoritma završila ili nije, te ako nije, koji korak je potrebno učiniti kao sljedeći.. Konačnost: svaki korak algoritma mora biti takav da bi ga, u principu, mogao izvesti čovjek koristeći papir i olovku, za konačno vrijeme. Odnosno, algoritam se mora zaustaviti u konačnom vremenu nakon konačnog broja koraka, a vrijeme izvršavanja algoritma mora biti razumno kratko. 4. Rezultativnost: pri završetku rada algoritma mora postojati mogućnost da se ustanovi je li algoritam postigao svoj cilj ili nije. Drugim riječima, je li algoritam došao do nekog rezultata. Obzirom na metodologiju tvorbe algoritama, može se govoriti o brute force algoritmima, podijeli i vladaj algoritmima, dinamičkim algoritmima, pohlepnim algoritmima, itd. 6

. Razvoj sustava za zapisivanje brojeva.1 Zapis brojeva u starim kulturama.1.1 Egipatski brojevni sustav Razvoj sustava za zapisivanje brojeva možemo smatrati početkom matematike. Najstariji matematički izvori potječu iz staroegipatske države. Sačuvana su dva glavna izvora o egipatskoj matematici, to su: Rhindov papirus i Moskovski papirus. Rhindov papirus je dug oko pet i pol metara i širok oko pola metra. Napisao ga je oko 1650. pr. Kr. pisac Ahmes (oko 1680. - 1620.q pr. Kr.), a Moskovski papirus potječe iz 1850. pr. Kr. U oba papirusa nalaze se zadaci vezani za praktične probleme, razine četiri elementarne operacije, rješavanja linearnih jednadžbi, računanja volumena i slično. Slika 2: Rhindov i Moskovski papirus Iz navedenih izvora pretpostavlja se da Egipćani brojeve nisu smatrali apstraktnim vrijednostima, nego su pri upotrebi nekog broja zapravo mislili na broj životinja ili biljaka. Tako su pri upotrebi broja 7 zapravo mislili, primjerice, na 7 ptica ili 7 jabuka. Koristili su matematičke simbole hijeratskog pisma, izvedenog iz hijeroglifa. Slika : Hijeroglifski i hijeratski brojevi 7

Egipćani su koristili dekadski brojevni sustav. Za brojeve 1, 10, 100, 1000, 10000, 100000 i 1000000 koristili su posebne znakove prikazane na slici. Svaki simbol se u zapisu broja ponavlja najviše devet puta. Poznavali su četiri osnovne računske operacije. Na sljedećem primjeru objašnjeno je kako su oduzimali prirodne brojeve, a na sličan način su provodili i zbrajanje. Algoritam množenja starih Egipćana naveden je u 5. poglavlju. Egipćani su oduzimali brojeve tako da se odmicao odredeni broj istih simbola. To je znalo biti i komplicirano kada se moralo oduzeti više simbola, nego što ih je bilo prisutno u prikazu. Na primjer, pri oduzimanju od broja 6 broj 8, postupali su ovako: Slika 4: Postupak oduzimanja brojeva Od 6 desetica potrebno je oduzeti desetice, ali moguće je ukloniti samo jedinice. Još preostaje 5 jedinica za oduzimanje. Jedna od preostalih desetica potrebna je da se omogući oduzimanje sljedećih 5 jedinica, jer 1 desetica - 5 jedinica = 10 jedinica - 5 jedinica = 5 jedinica. Točan mehanizam oduzimanja koji su koristili nije bio sasvim jasan, iako ova ilustracija pokazuje kojim se redoslijedom moglo provesti oduzimanje..1.2 Babilonski brojevni sustav Pored Egipćana, vrlo značajne rezultate u matematici dali su i Babilonci (oko 2000. g. pr. Kr.). Babilonska matematika je u mnogim aspektima naprednija od egipatske. Babilonci su koristili brojevni sustav s bazom 60 (seksagezimalni brojevni sustav). To je bio prvi sustav u kojem je jedan te isti znak, tj. jedna te ista znamenka, mogla označavati različite brojeve već prema mjestu, odnosno prema poziciji koju zauzima. Babilonci nisu imali šezdeset različitih znakova za brojeve od nule do 59, već su svaki takav broj ispisali sa samo dvije vrste znakova: po jedan vertikalni, uski otisak klina za svaku jedinicu: i po jedan tupi otisak klina za svaku deseticu <. Oznaka za nulu pojavila se tek u kasnijem razdoblju (oko 5. st. pr. Kr.) pa zapis brojeva nije mogao biti jedinstven. Babilonski seksagezimalni brojevni sustav koristi se i u današnje vrijeme za računanje vremena i kuteva. Babilonci su značajni i po tome što su prvi podijelili godinu na 8

dvanaest mjeseci po trideset dana, dan na 24 sata, sat na 60 minuta, te minutu na 60 sekundi. Slika 5: Brojevni sustav s bazom šezdeset u babilonskoj matematici Osim toga, vrlo je zanimljiv babilonski način množenja brojeva. Koristili su tzv. babilonske matematičke tablice koje su sadržavale kvadrate brojeva do 59 i kubove brojeva do 2. Množenje su provodili pomoću formula iz kojih se može zaključiti da je za množenje brojeva potrebna samo tablica kvadrata: ab = (a + b)2 a 2 b 2 2 ili ab =.1. Grčki brojevni sustav (a + b)2 2 (a b)2. 4 Suvremenici antičke Grčke (oko 900. pr. Kr. - 200. n. e.) koristili su dva usporedna dekadska brojevna sustava. Prvi je bio zasnovan na početnim slovima imena brojeva. Slika 6: Grčki brojevni sustav zasnovan na početnim slovima imena brojeva 9

Primjerice, broj 229 bi zapisivali ovako: HH Γ IIII. U ovom primjeru možemo primijetiti pravilo da se isti znak može koristiti uzastopno najviše četiri puta. Drugi brojevni sustav upotrebljavao je sva slova grčkog alfabeta. Slika 7: Grčki brojevni sustav s alfabetskom notacijom Broj iz prethodnog primjera, 229, u ovom brojevnom sustavu pisali bi ovako: Σ K Θ..1.4 Rimski brojevni sustav Jedan od najpoznatijih nepozicijskih brojevnih sustava je rimski brojevni sustav u kojemu nalazimo sljedeće oznake: Znamenka Vrijednost I 1 V 5 X 10 L 50 C 100 D 500 M 1000 Tablica 1. Znamenke u rimskom brojevnom sustavu Postoji nekoliko bitnih pravila za zapisivanje rimskih brojeva: Za zapisivanje brojeva uobičajeno je koristiti uzastopno najviše tri ista znaka; Ako nekoliko jednakih znamenki stoji jedna uz drugu, onda im se vrijednosti zbrajaju (npr. III znači I + I + I, tj. time je zapisan broj ); Ako su uzastopno zapisane dvije različite znamenke od kojih lijevo stoji ona znamenka s većom vrijednošću, onda se njihove vrijednosti zbrajaju (npr. XV znači X + V, tj. time je zapisan broj 15); 10

Ako su uzastopno zapisane dvije različite znamenke od kojih lijevo stoji ona znamenka s manjom vrijednošću, onda se njezina vrijednost oduzima od desno napisane znamenke (npr. XL znaci L X, tj. time je zapisan broj 40). Računanje je zbog takvog zapisa brojeva bilo vrlo nespretno. Rimski brojevni sustav se u Europi primjenjivao sve do 12. stoljeća..1.5 Indijsko-arapski brojevni sustav Današnji način zapisivanja brojeva potječe iz Indije i vjerojatno je nastao krajem 6. stoljeća. Indijci su koristili dekadski brojevni sustav. To je bio prvi pravi pozicijski brojevni sustav. Oznaku za nulu koristili su od 9. stoljeća. Slika 8: Znamenke u indijskom brojevnom sustavu Indijci su značajni i po uvodenju negativnih brojeva i njihovoj pravilnoj interpretaciji. Osim toga, otkrili su i postojanje pozitivnog i negativnog kvadratnog korijena, te nemogućnost vadenja kvadratnog korijena iz negativnog broja. Brojke koje danas koristimo nazivaju se arapskim brojkama. Arapi su takoder koristili indijski dekadski sustav. Na slici 9 može se uočiti sličnost s današnjim zapisom znamenaka. Slika 9: Primjeri različitih znakova za brojeve i mijenjanje njihovih oblika 11

Pretpostavlja se da su još oko 1000. godine postojale dvije arapske škole koje su se veoma razlikovale u stavovima. Jedna škola je bila upoznata s indijskim algoritmima, dok je druga djelovala na strogo znanstvenom stavu Euklida, te se pretpostavlja da je odbijala korištenje znamenaka..2 Euklidov algoritam Euklid (0. - 275. pr. Kr.) je bio najznačajniji grčki matematičar. Djelovao je u doba helenizma koje se po njemu naziva još i Euklidovo doba. Najznačajnije Euklidovo djelo su Elementi koji se sastoje od trinaest knjiga veličine poglavlja. Iako su u Elementima prikazani većinom rezultati drugih matematičara, Euklidov doprinos kroz logički slijed organiziranja sadržaja Elemenata postao je vrlo bitan za daljnji razvoj matematike. Većina rezultata pripisuje se pitagorejcima (knjige I, II, VI-IX i XI). Knjige VII, VIII i IX bave se teorijom brojeva. Jedan od najvažnijih Euklidovih rezultata, navedenih u knjizi VII, je tzv. Euklidov algoritam za odredivanje najveće zajedničke mjere dva cijela broja. Prije navodenja algoritma potrebno je dokazati sljedeći teorem: Teorem.2.1 (Teorem o dijeljenju s ostatkom) Za proizvoljan prirodan broj a i cijeli broj b postoje jedinstveni cijeli brojevi q i r takvi da je b = aq + r, 0 r < a. Dokaz: Promotrimo skup A = {m Z : b am 0}. Najmanji nenegativni član ovog skupa označimo sa r. Stavimo da je q = maxa i r = b aq. Tada vrijedi b = qa + r. Imamo da je q A, tj. b aq 0. Prema tome, vrijedi r = b aq 0. Kada bi bilo r a, imali bismo b = qa + r = qa + r + a a = a(q + 1) + (r a) a(q + 1), pa bi slijedilo b a(q + 1) 0, tj. q + 1 A, što je nemoguće, jer je q = maxa. Zaključujemo da je r < a. Dakle, b = qa + r, 0 r < a. Time je dokazana egzistencija. Preostaje još dokazati jedinstvenost od q i r. Pretpostavimo da su q 1, q 2, r 1, r 2 Z takvi da je Tada je b = aq 1 + r 1 = aq 2 + r 2, 0 r 1 < a, 0 r 2 < a. a(q 1 q 2 ) = r 2 r 1. Iz 0 r 1 < a i 0 r 2 < a slijedi r 2 r 1 < a. No, zbog prethodne jednakosti je r 2 r 1 = a q 1 q 2, pa je r 2 r 1 < a moguće samo ako je r 2 r 1 = 0, tj. r 1 = r 2. slijedi aq 1 = b r 1 = b r 2 = aq 2, dakle, q 1 = q 2. Time je dokazana i jedinstvenost. 12

Broj r iz iskaza prethodnog teorema naziva se ostatak pri dijeljenju broja b s brojem a. Definicija.2.1 Neka su a, b Z cijeli brojevi koji nisu oba jednaki nuli. Najveća zajednička mjera brojeva a i b je najveći broj d N takav da d a i d b. Dakle, d = max M, gdje je M = {k N; k a, k b}. Najveću zajedničku mjeru označavamo kraticom GCD (iz engleskog jezika the greatest common divisor). Stoga, d = GCD(a, b). Teorem.2.2 (Euklidov algoritam) Neka su a, b Z i b 0. Pretpostavimo da je uzastopnom primjenom prethodnog teorema dobiven niz jednakosti: a = bq 1 + r 1, 0 < r 1 < b, b = r 1 q 2 + r 2, 0 < r 2 < r 1, r 1 = r 2 q + r, 0 < r < r 2,. r n 2 = r n 1 q n + r n, 0 < r n < r n 1, r n 1 = r n q n+1. Tada je GCD(a, b) = r n, odnosno najveća zajednička mjera brojeva a i b je jednaka posljednjem ostatku različitom od nule u Euklidovom algoritmu. Dokaz: Dokaz ćemo provesti u tri dijela. (i) Najprije ćemo dokazati da r n a i r n b. Stavimo r 0 = b i r 1 = a. Tada prvih n jednakosti u algoritmu poprimaju oblik: r k 2 = r k 1 q k + r k, 1 k n. (1) Iz posljednje jednakosti, r n 1 = r n q n+1, vidi se da r n r n 1. Sada iz n-te jednakosti, r n 2 = r n 1 q n + r n, slijedi da r n r n 2. Neka je k n i pretpostavimo da smo dokazali da r n r k i r n r k 1. Tada iz k-te jednakosti, r k 2 = r k 1 q k +r k, slijedi da r n r k 2. Na taj način silaznom matematičkom indukcijom zaključujemo da r n r k, k 1. Posebno, r n r 1 i r n r 0, tj. r n a i r n b. (ii) Dokazat ćemo da postoje x, y Z takvi da je r n = ax + by, tj. da se r n može prikazati kao linearna kombinacija od brojeva a i b. Upotrebom uzlazne matematičke indukcije i uz oznake iz (i) treba dokazati da k 1 postoje x, y Z takvi da je r n = ax + by. To je trivijalno za k = 1 i k = 0: r 1 = a = 1 a + 0 b, r 0 = b = 0 a + 1 b. 1

Provedimo sada korak indukcije: pretpostavimo da je 1 k < n i da je dokazano da postoje x 1, x 2, y 1, y 2 Z takvi da je Tada iz (1) dobivamo: r k 2 = ax 2 + by 2 i r k 1 = ax 1 + by 1. r k = r k 2 r k 1 q k = ax 2 + by 2 (ax 1 + by 1 )q k = a(x 2 q k x 1 ) + b(y 2 q k y 1 ), dakle, uz oznake x = x 2 q k x 1 i y = y 2 q k y 1 imamo r k = ax + by. Time je korak indukcije proveden. (iii) Prema (1) vrijedi r n a i r n b. Ako je c Z takav da c a i c b, tada pomoću (ii) dobivamo da c r n. Posebno, c r n, pa zaključujemo da je r n najveća zajednička mjera brojeva a i b, dakle r n = d. Možemo primijetiti da je pri svakom dijeljenju ostatak strogo manji od ostatka pri prethodnom dijeljenju. Stoga, Euklidov algoritam sigurno završava: nakon konačno mnogo dijeljenja s ostatkom doći ćemo do djeljivosti, tj. do dijeljenja bez ostatka. Primjer.2.1 Odredite d =GCD (655, 2057) i nadite cijele brojeve x, y tako da zadovoljavaju jednakost 655x + 2057y = d. Rješenje Prvo ćemo odrediti najveću zajedničku mjeru brojeva 655 i 2057 koristeći Euklidov algoritam. 655 = 2057 1 + 1598 2057 = 1598 1 + 459 1598 = 459 + 221 459 = 221 2 + 17 221 = 17 1 d = GCD(655, 2057) = 17. Napomena.2.1 Pri rješavanju problema izražavanja najveće zajedničke mjere brojeva a i b kao linearne kombinacije tih brojeva često se primjenjuje tzv. tablična metoda pri čemu se koristi niz brojeva iz Euklidovog algoritma. Dakle, rješenja jednadžbe GCD(a, b) = ax + by mogu se efikasno dobiti na sljedeći način: ako je 14

r 1 = a, r 0 = b, r i = r i 2 q i r i 1, x 1 = 1, x 0 = 0, x i = x i 2 q i x i 1, y 1 = 0, y 0 = 1, y i = y i 2 q i y i 1, onda je ax i + by i = r i za i = 1, 0, 1,..., n + 1. Ova metoda je točna za i = 1, 0 pa tvrdnja slijedi induktivno. Posebno vrijedi: ax n + by n = GCD(a, b). Riješimo sada drugi dio zadatka, tj. pronadimo cijele brojeve x, y koji zadovoljavaju jednakost 655x + 2057y = d. x 1 = x 1 q 1 x 0 = 1 1 0 = 1 x 2 = x 0 q 2 x 1 = 0 1 1 = 1 x = x 1 q x 2 = 1 ( 1) = 4 x 4 = x 2 q 4 x = 1 2 4 = 9 y 1 = y 1 q 1 y 0 = 0 1 1 = 1 y 2 = y 0 q 2 y 1 = 1 1 ( 1) = 1 + 1 = 2 y = y 1 q y 2 = 1 2 = 7 y 4 = y 2 q 4 y = 2 2 ( 7) = 2 + 14 = 16 Dobivene brojeve zbog preglednosti zapisujemo u tablicu: i -1 0 1 2 4 q i 1 1 2 x i 1 0 1-1 4-9 y i 0 1-1 2-7 16 Dakle, x 4 = 9, a y 4 = 16 pa slijedi: 655 ( 9) + 2057 16 = 2895 + 2912 = 17.. Otkriće prostih brojeva Osim Euklidovog algoritma, u knjigama VII, VIII i IX Euklidovih Elemenata navedeni su i brojni rezultati o prostim brojevima. U knjizi VII se prvi puta spominje definicija prostog broja, te razne zanimljive propozicije o prostim brojevima. Knjiga IX se takoder bavi teorijom brojeva u kojoj se nalazi teorem o jedinstvenoj faktorizaciji za brojeve koji su produkt različitih prostih brojeva. Obzirom na taj rezultat, Gauss je tek 1801. godine dokazao opću verziju osnovnog teorema aritmetike. U današnjoj formulaciji taj teorem glasi: 15

Teorem..1 (Osnovni teorem aritmetike) Faktorizacija svakog prirodnog broja n > 1 na proste faktore je jedinstvena do na poredak prostih faktora. U knjizi IX se može naći još jedan vrlo bitan rezultat koji se pripisuje Euklidu: Teorem..2 (Euklid) Skup svih prostih brojeva je beskonačan. Dokaz: Pretpostavimo suprotno, tj. da su p 1, p 2,..., p k svi prosti brojevi. Tada medu njima postoji najveći, označimo ga s p k. Neka je P produkt svih tih prostih brojeva uvećan za 1, P = p 1 p 2... p k + 1. Tada je P > p k, dakle složen je, pa je djeljiv s nekim prostim brojem. No, P očito nije djeljiv niti s jednim od prostih brojeva p 1, p 2,..., p k, pa bi morao postojati prost broj veći od p k. Time smo dobili kontradikciju. 16

Eratosten iz Kirene (275. - 195. pr. Kr.) bio je jedan od najznačajnijih Euklidovih suvremenika, odnosno jedan od najznačajnijih predstavnika matematičke škole u Aleksandriji koju je u. stoljeću prije Krista osnovao Euklid. Pored mnogih drugih rezultata, posebno je poznat po tzv. Eratostenovom situ, tj. metodi za nalaženje prostih brojeva. Kod primjene ove metode postupa se na način da se ispišu svi prirodni brojevi za koje želimo provjeriti jesu li prosti ili ne. Najbolje ih je ispisati u tablicu s po 10 brojeva u retku. U prvom krugu u tablici se briše broj 1 (koji nije ni prost ni složen), zaokruži se broj 2 (prvi prosti broj), a zatim se brišu svi parni brojevi (višekratnici broja 2). U drugom krugu zaokruži se broj (sljedeći prosti broj), a zatim se brišu svi višekratnici broja koji još nisu obrisani. Postupak se ponavlja za broj 5 i njegove višekratnike, broj 7 i njegove višekratnike itd. 2 5 7 11 1 17 19 2 29 1 7 41 4 47 Tablica 1. Prosti brojevi manji od 50 dobiveni Eratostenovim sitom 17

4. Kratak pregled povijesti razvoja računala 4.1 Mehanička pomagala za računanje Moglo bi se reći da je računanje staro koliko i čovječanstvo. Nastalo je iz praktičnih ljudskih potreba kao što su: bilježenje članova plemena i stoke, mjerenje zemljišta, razmjene dobara itd. Prva metoda brojanja je korištenje 10 prstiju, koja je bila djelotvorna kod brojanja, ali ne i za računanje. Za računanje su se koristile razne metode kao što su: upotreba kamenčića za brojeve veće od 10, urezivanje zareza na kosti ili štapu, kamenčići u rupama i zapisivanje crtica. Slika 10: Urezivanje zareza na kosti (gore), zapisivanje crtica (dolje) Znanje računanja primjenjivalo se praktično još u staro doba, prije otprilike 5000 godina. Graditelji golemih piramida, hramova i drugih gradevina morali su se koristiti računskim znanjima. Prvo računalo u svijetu je poznata gradevina Stonehenge koja potječe iz 1900. pr. Kr. Ta gradevina je omogućila točno predvidanje Mjesečevih mijena. Uz pomoć Mjeseca koji je bacao sjenu kamenja na točno označena mjesta na tlu, bilo je moguće predvidjeti vrijeme sljedećeg punog Mjeseca te vrijeme pomrčine Mjeseca. Slika 11: Zamišljena rekonstrukcija Stonehenge-a (lijevo), Stonehenge danas (desno) 18

Abakus Najpoznatije prijenosno pomagalo pri izvodenju računskih operacija je abakus ili abak (latinski abacus znači ploča za računanje). Prvi poznati abakus postojao je u Babilonu prije 5000 godina. Njime se računalo pomoću kamenčića koji su se umetali u niz paralelnih kanalića napravljenih u pijesku. Zatim se abakus razvio u oblik (Slika 12) koji se sastojao od okvira i razapetih žica na kojima su postavljene pločice ili kuglice. Stupci najčešće predstavljaju potencije broja 10 i podijeljeni su u dva područja. Svaka kuglica ispod letvice predstavlja jednu jedinicu, svaka kuglica iznad predstavlja 5 jedinica, tako da svaki puni stupac ima 15 jedinica. Računa se pomicanjem kuglica prema letvici ili od nje. Usavršeni abakus koristi se i danas za svakodnevno računanje u Rusiji, Kini i Japanu. Slika 12: Abakus Primjer 4.1.1 Dijeljenje broja 124 brojem 7 na abakusu. Postoje posebna pravila metode dijeljenja na abakusu za svaki broj od 1 do 9. Pravila dijeljenja sa 7 na abakusu 2 : 2 Jean-Luc Chabert, A History of Algorithms (From the Pebble to the Microchip), Springer-Verlag Berlin Heidelberg New York, 1999. 19

Pojašnjenje tablice: PRAVILO 1: Ako je znamenka djeljenika jednaka 1, dijelimo 10 sa 7 i dobivamo 10 = 1 +. Stoga, desno od promatrane kuglice dodajemo kuglice vrijednosti 1. 7 7 PRAVILO 2: Ako je znamenka djeljenika jednaka 2, dijelimo 20 sa 7 i dobivamo 20 = 2 + 6. Zbog toga, promatranoj znamenki 2, tj. dvjema kuglicama vrijednosti 1 7 7 dodajemo ostatak 6 (jednu kuglicu vrijednosti 5 i drugu vrijednosti 1). Objašnjenja ostalih pravila su veoma slična. Općenito, kada na abakusu dijelimo dva broja, djelitelja stavljamo na lijevu stranu, a djeljenika na desnu stranu. To znači da će brojevi 124 i 7 na abakusu izgledati ovako: Nadalje, prva znamenka djeljenika 124 je 1. Dakle, primjenjuje se prvo pravilo. Zatim pojednostavimo 5 jedinica: Druga znamenka novog djeljenika je 5 pa primjenjujemo peto pravilo, tj. dijelimo 50 sa 7 i dobivamo 50 = 7 + 1. Zbog toga je potrebno promatranoj kuglici (koja 7 7 označava 5 jedinica) dodati dvije kuglice vrijednosti 1, te desno od nje dodati jednu kuglicu (koja predstavlja ostatak 1): Treća znamenka novog djeljenika je 4, pa primjenjujemo četvrto pravilo, tj. dijelimo 40 sa 7 i dobivamo 40 = 5+ 5. Zbog toga dodajemo jednu kuglicu na promatrane četiri 7 7 kuglice, te pet kuglica desno od tih kuglica koje predstavljaju ostatak 5: 20

Četvrta znamenka novog djeljenika je 9, pa dijelimo 9 sa 7 i dobivamo 9 = 1 + 7 2. Stoga od devet jedinica oduzimamo sedam, te jednu kuglicu dodajemo lijevo od 7 promatramih devet jedinica: Vidimo da je rezultat dijeljenja broja 124 sa 7 je 176 sa ostatkom 2. 1614. godine škotski matematičar John Napier (1550. - 1617.) otkrio je logaritme, te objavio prve logaritamske tablice. Otkriće logaritama bitno je pojednostavilo operacije množenja i dijeljenja. Napier je koristio svojstva logaritma tako da velike brojeve izrazi pomoću manjih s kojima je lakše računati. Nedugo nakon otkrića logaritama otkriveno je i pomično logaritamsko računalo, tzv. šiber. Potisnut je tek masovnom pojavom elektroničkih kalkulatora. Prvi poznati mehanički kalkulator izraduje 162. godine njemački profesor W. Schickard (1592. - 165.), ali nedugo zatim izum je nestao, te je tek 1956. godine izradena rekonstrukcija na temelju Schickardovih nacrta i podataka. Stoga je mnogo poznatiji bio Pascalov kalkulator kojeg je izumio 1642. godine Blaise Pascal. Njegova osnovna namjena bila je izvodenje računske operacije zbrajanja, ali na njemu se moglo i oduzimati i množiti (ponavljanjem operacije zbrajanja potreban broj puta). Sljedeći, mnogo savršeniji, kalkulator (Slika 1) 1672. godine zamislio je G.W. Leibniz (1646. - 1716.). Mogao je obavljati sve četiri osnovne računske operacije, ali nije bio pouzdan i upotrebljiv u praksi, jer tadašnja tehnologija nije mogla pratiti Leibnizovu zamisao. Nakon Pascalovog i Leibnizovog kalkulatora dolazi do stagnacije u razvoju pomagala za računanje. Slika 1: Leibnizov kalkulator http : //www.ff infing.hr/povijest racunala.htm 21

4.2 Elektronička računala i razvoj preciznog zapisa algoritama Potreba za preciznim zapisivanjem algoritama pojavila se s razvojem računskih strojeva. U prvoj polovini 19. stoljeća engleski matematičar i inženjer Charles Babbage projektirao je prvo univerzalno računalo, sposobno izvoditi različite proračune ovisno o programu koji se u njega unese. Babbage je stroj nazvao Analytical engine i do kraja života nije ga uspio izraditi. Ipak, u suradnji s Adom Byron 4 razvijao je prve programe za svoje mehaničko računalo. Charlesa Babbage-a smatra se ocem računala, jer je predlagao način rada računala koji se koristi i danas. Funkcije stroja podijelio je na tri dijela: pohrana, procesiranje i kontrola. Predložio je da se pohrana, odnosno ono što se danas može shvatiti kao memorija, podijeli u dva spremnika: jedan za brojeve ili podatke nad kojima se vrše operacije i drugi za spremanje instrukcija zbog odredivanja operacija koje će se vršiti nad podacima. Za pohranu podataka koristio je kartice s bušenim rupicama, tzv. bušene kartice. Slika 14: Analitički stroj Sredinom 20. stoljeća izgradena su prva elektronička računala. Tehnologiju elektronskih cijevi ubrzo su zamijenili tranzistori, a u 70-tim godinama svi osnovni elementi računala mogli su se smjestiti na samo jednu pločicu poluvodiča veličine nekoliko desetaka kvadratnih milimetara, pa je tako nastao mikroprocesor. Smanjivanjem veličine računala, ona postaju sve brža i moćnija. Taj proces se nastavlja još i danas. Prva elektronička računala programirala su se u strojnom jeziku, naredbama koje izvodi procesor. Kao pomoć u programiranju razvili su se tzv. asembleri, programi koji prevode simboličke naredbe u strojne. Sredinom 20. stoljeća pojavili su se viši programski jezici kao što su FORTRAN, Basic i dr. Da bi se programi pisani u tim jezicima mogli izvoditi na računalu, potrebno ih je najprije prevesti na strojni jezik. 4 Ada Augusta Byron (1815-1852), smatra se prvim programerom, te njoj u čast je programski jezik ADA, definiran 198., dobio ime. 22

To se radi pomoću posebnih programa prevoditelja ili kompilatora (eng. compiler). U drugoj polovini 20. stoljeća pojavili su se specijalizirani programski jezici kao što su: Pascal, C, C++, Java i Python. Takvi jezici ne prevode se s pomoću kompilatora, nego ih izvodi takozvani interpreter, program koji paralelno prevodi i izvodi naredbe. Općenito, programe smatramo nizovima naredbi i izvode se redom kojim su napisani s točno odredenim ciljem. Da bi uspješno napisali neki program, moramo najprije analizirati problem, te precizno odrediti potrebne korake čija primjena dovodi do željenog rješenja. Cilj rješavanja problema je kreiranje algoritma. Vrlo rano uočena je potreba zapisivanja algoritama u jednostavnom i preglednom obliku, čitljivijem od koda pisanog u nekom programskom jeziku. Dva najčešća načina pomoću kojih možemo zapisati algoritam su pseudokod ili pseudojezik i dijagram toka. Pseudokod se koristi u mnogim knjigama i člancima koji se bave algoritmima. Dijelove algoritma možemo zamijeniti pojedinačnim naredbama, opisati ih prirodnim jezikom ili ih raspisati u detalje. U pseudokodu naredbe se zapisuju riječima, jedna ispod druge. Primjer 4.2.1 Napišite pseudokod za algoritam koji za učitane duljine stranica kvadra ispisuje njegov volumen. Rješenje: 1. Upiši duljine stranica kvadra: a, b, c 2. Ako barem jedan od brojeva a, b, c 0 ispiši poruku o grešci i idi na korak 1. Računaj V = a b c 4. Ispiši V 5. Kraj Dijagram toka podataka je grafički prikaz algoritma. Zapisivanje se vrši medunarodno dogovorenim simbolima i ne ovisi o govornom jeziku onoga koji sastavlja algoritam, čime se osigurava jednostavnost i jednoznačnost algoritma. 2

Dijagram toka za algoritam iz prethodnog primjera izgleda ovako: Dijagrami toka su zanimljiviji i atraktivniji od pseudojezika, ali zauzimaju puno više prostora. Zbog toga se u većini knjiga i članaka algoritmi zapisuju u pseudojeziku. 24

4.2.1 Vrste algoritama u računarstvu Moderno računarstvo ne bi postojalo bez primjene algoritama, njihove matematičke analize, te postupcima ubrzavanja njihova izvodenja. Sva su ta područja povezana i medusobno se nadopunjuju. Analiza složenosti algoritama je značajna disciplina koja se najčešće provodi pomoću papira i olovke. Uobičajeno je složenost algoritama izražavati kao matematičku funkciju koja veličinu unosa pretvara u količinu vremena potrebnu da se algoritam završi (vremenska složenost) ili količinu prostora potrebnu da se algoritam završi (memorijska složenost). Vrijeme izvršenja algoritma (eng. running time ) ovisi o veličini ulaznih podataka, ali često i o tome kakvi su ulazni podaci (na primjer, već sortirani niz brojeva lakši je za sortiranje). Osim toga, vrijeme izvršenja algoritma potrebno je izraziti neovisno od vrste računala (eng. Ignore Machine Dependent Constants ). Algoritme obzirom na metodologiju tvorbe algoritama možemo podijeliti na: Brute force algoritmi (naivni algortmi) su najmanje učinkoviti algoritmi. Takav algoritam pronalazi rješenja nekog problema tako što isproba sve mogućnosti. Na primjer, kod rješavanja problema izračunavanja vrijednosti potencije a n, pri čemu su n N i broj a zadani, primjenom brute force algoritma bi postupili ovako: a n = a } a {{... a}. n puta Podijeli i vladaj algoritmi dolaze do rješenja nekog problema tako da problem dijele na jedan ili više potproblema, te nakon toga potprobleme rješavaju rekurzivno. Zatim rješenja potproblema spajaju u konačno rješenje problema. Na primjer, kod rješavanja problema izračunavanja vrijednosti potencije a n, primjenom podijeli i vladaj algoritma, problem se dijeli na dva ista potproblema: { n a a n 2 a n 2, n paran = a n 1 2 a n 1 2 a, n neparan Dinamički algoritmi su vrlo slični podijeli i vladaj algoritmima. U strategiji dinamičkog programiranja javljaju se dva glavna problema. Prvi problem je da nekad nije moguće spojiti dva manja potproblema u veći, a drugi je da postoji neprihvatljivo veliki broj potproblema koje treba riješiti. Ponekad, broj potproblema koje treba riješiti raste eksponencijalno s veličinom zadanog problema, a rekurzijom se isti potproblemi rješavaju više puta što dovodi do nepotrebnog gubljenja vremena. U takvim situacijama dinamičko programiranje je vrlo korisno. Prvo se rješavaju problemi manje veličine, pa nešto veći, sve dok se ne dosegne potpuna veličina zadanog problema. Na primjer, pri računanju Fibonaccijevih brojeva algoritam podijeli i vladaj daje rekurzivnu funkciju koja glasi: F 0 = 1, F 1 = 1, F n = F n 1 + F n 2, n > 1. 25

Ako izračunamo složenost tog algoritma, možemo uočiti da vrijeme izvršavanja algoritma eksponencijalno raste s veličinom ulaza. Dinamičkim programiranjem može se doći do boljeg rješenja. Prvo se riješi trivijalan problem za F 0 i F 1, iz njih se izračuna F 2, pa F iz F 2 i F 1, itd. Time se prvo riješe jednostavniji problemi i spreme se njihovi rezultati koji se dalje koriste za rješavanje malo složenijih problema, čiji se rezultati takoder spremaju za daljnje rješavanje malo složenijih problema itd. Složenost ovog algoritma je linearna što je puno brže od podijeli i vladaj algoritma. Pohlepni algoritmi su vrlo korisni kada dinamički algoritmi ne daju učinkovito rješenje zbog predugih vremenskih izvršavanja. Tehnikom pohlepnog pristupa, rješenje zadanog algoritma se konstruira u nizu koraka. U svakom se koraku bira mogućnost koja je lokalno optimalna u nekom smislu. Takvi optimalni koraci općenito vode do globalnog optimalnog rješenja. Na primjer, trgovac treba vratiti kupcu iznos od 7 kune. Na raspolaganju su mu novčanice od 50, 20 i 10 kuna, te kovanice od 5 i 1 kune. Primjenom pohlepnog algoritma trgovac bi kupcu dao jednu novčanicu od 50 kuna, jednu od 20 kuna i kovanice od 1 kune. Znači, izabere se najveća novčanica koja ne prelazi ukupnu sumu, stavlja se na listu za vraćanje, oduzme se od ukupnog iznosa, te se postupak ponavlja sve dok se ne vrati odreden iznos. Na taj način dolazimo do najučinkovitijeg rješenja. Ako imamo sljedeći problem: trgovac kupcu treba vratiti iznos od 0 kuna pomoću novčanica od 20 i 10 kuna, te kovanica od 25 i 1 kune. Pohlepni algoritam prvo vraća kovanicu od 25 kuna i tada mu preostaje samo vratiti pet kovanica od 1 kune. Dakle, ukupno 6 kovanica, dok bi optimalno rješenje bilo vratiti jednu novčanicu od 20 kuna i jednu novčanicu od 10 kuna. 26

5. Neki poznati algoritmi u matematici 5.1 Razvoj egipatskog algoritma množenja Termin množenje potječe od latinske riječi productum, a koristi se od 1. stoljeća. Izmedu mnogih znakova za množenje dugo je upotrebljavan znak pravokutnika, kao simbol koji znači da se njegova površina dobiva množenjem duljina stranica. Znak za množenje prvi je uveo Englez W. Oughtred 161. godine. Današnji znak uveo je njemački matematičar Regiomontanus, a kasnije ga je koristio i Leibniz. Množenje je nastalo prirodnim načinom u rješavanju zadataka. Na primjer, kod problema kao što je: kako odrediti koliko kvadara je potrebno za izgradnju zida i slično. Možemo reći da je množenje zapravo ponavljanje zbrajanja istog broja potreban broj puta: B A = A + A + A + + A }{{} B pribrojnika Uočimo da s povećanjem broja B ovaj postupak postaje dugotrajan. Stoga se u postupku množenja pojavilo grupiranje. Najjednostavniji način grupiranja je stvaranje jednakobrojnih skupina, na primjer po pet članova: B A = (A + A + A + A + A) + (A + A + A + A + A) + + A + A gdje se u posljednjoj skupini nalazi od 1 do 5 članova. Primjer 5.1.1 Brojevi 49 i 81 pomnoženi grupiranjem u jednakobrojne skupine. 1 81 2 162 24 4 24 5 405 10 810 15 1215 20 1620 25 2025 0 240 5 285 40 240 45 645 49 969 Postupak izračunavanja je sadržan u dva stupca. U lijevom stupcu se nalaze brojevi zbrojenih faktora A, a u desnom se nalaze rezultati djelomičnih umnožaka. Prvih pet redaka predstavlja prvu petočlanu skupinu, a sljedeći retci predstavljaju zbrajanje samo 27

petočlanih skupina. U zadnjem retku je zbroj predposljednjeg umnoška s umnoškom 4 A. Možemo uočiti da ako želimo množiti nekim većim brojem, tada bi više članova trebalo biti u jednoj skupini. Stoga, broj članova u skupini nije konstantan. Ako bismo umnoške 1 A, 2 A, A,... odmah smatrali skupinama imali bi: B A = (A) + (A + A) + (A + A + A) + + A + A, tj. svaka sljedeća skupina bi od prethodne bila veća za A. Pomnožimo brojeve 49 i 81 na ovakav način: 1 81 1 81 2 162 24 24 6 486 4 24 10 810 5 405 15 1215 6 486 21 1701 7 567 28 2268 8 648 6 2916 9 729 45 645 49 969 Na lijevoj strani tablice nalaze se brojevi članova u skupinama i njihove odgovarajuće vrijednosti, a desno u tablici nalaze se brojevi članova u svim do sada zbrojenim skupinama i odgovarajući umnošci. Na primjer, broj 6 u trećem stupcu predstavlja ukupan broj članova iz prve tri skupine (1+2+=6). Zbrojeve na lijevoj strani tablice stvaramo sve dok ne bude: 1 + 2 + + 4 + + k B. Najbrži način dobivanja velikih skupina je podvostručavanje do sada najveće postojeće skupine: B A = (A)+(A+A)+(A+A+A+A)+(A+A+A+A+A+A+A+A)+ +A+A Pomnožimo sada brojeve 49 i 81 na ovakav način: 1 81 2 2592 2 162 48 888 4 24 49 969 8 648 16 1296 2 2592 Na lijevoj strani tablice, kao i u prethodnom načinu, nalaze se brojevi članova u skupinama i njihove odgovarajuće vrijednosti, a desno u tablici nalaze se brojevi članova u svim do sada zbrojenim skupinama i odgovarajući umnošci. 28

Upravo je taj algoritam množenja naveden na Rhindovom papirusu koji potječe iz 1650. g. pr. Kr. Vrlo vjerojatno da su mu prethodila razmatranja prethodno navedena. Usporedbom brzine izračunavanja s brzinom prethodnih algoritama možemo uočiti da je ovaj algoritam znatno brži. Kao kriterij brzine uzimamo broj zbrajanja potrebnih za množenje s tim istim brojem. Za algoritam s postupnim zbrajanjem potrebno je B 1 zbrajanja. Za sljedeći navedeni algoritam, s raspodjelom članova na petočlane skupine, potrebno je 4 zbrajanja za stvaranje prve skupine i B za zbrajanje skupina medusobno. 5 Broj zbrajanja kod algoritma u kojemu svaka sljedeća skupina ima jedan više član od prethodne skupine, jednak je dvostrukom broju skupina, jer znamo da je za stvaranje svake skupine potrebno jedno zbrajanje i daljnje zbrajanje nam je potrebno za pribrajanje rezultata dotadašnjoj vrijednosti umnoška. Broj skupina mora zadovoljavati jednakost: odnosno 1 + 2 + + 4 + + k B k(k+1) 2 B Ukupan broj skupina je najveće cjelobrojno rješenje te nejednakosti. Ono je: k = 1 + 1 + 8 B 2 Budući da B može biti najmanje (jer u suprotnom ne bi imali skupine), približno možemo reći da je k 2 B Kako je broj zbrajanja jednak dvostrukom broju skupina, slijedi da je broj zbrajanja oko B. Kod egipatskog algoritma skupine stvaramo sve dok vrijedi 2 k B. Iz toga proizlazi da je k = log 2 B. Slično kao u prethodnom primjeru, pribrojimo svaku skupinu najviše dva puta pa imamo najviše 2log 2 B zbrajanja potrebnih za množenje. U sljedećoj tablici nalazi se usporedba broja zbrajanja potrebnih za množenje s brojevima 100, 1000 i 1 000 000. Broj zbrajanja B 100 1000 1 000 000 B 1 99 999 999 999 B + 4 24 204 200 004 5 B 0 96 000 2log 2 B 14 20 40 Iz tablice možemo zaključiti da je egipatski algoritam množenja u svim opisanim slučajevima najbolji. Taj algoritam se koristi još i danas, ali u obliku pogodnom za decimalni sustav (množenje s deset umjesto dva). 29

5.2 Hornerov algoritam Kako bi izračunali vrijednost polinoma u točki, potrebne su nam samo operacije množenja, zbrajanja i oduzimanja. Medutim, trebamo li računati vrijednost polinoma u velikom broju točaka, korisno je primijeniti tzv. Hornerov algoritam 5. Osim toga, Hornerov algoritam se koristi i za dijeljenje polinoma s polinomom prvog stupnja. Neka je dan polinom n-tog stupnja P n (x) = a n x n + a n 1 x n 1 +... + a 1 x + a 0, a n 0, n N (2) nad skupom realnih brojeva R, a n, a n 1,..., a 1, a 0 R. Najprije ćemo razmotriti problem dijeljenja polinoma P n (x) s polinomom prvog stupnja p(x) = x α, α R. Prema teoremu o dijeljenju polinoma s ostatkom postoji polinom i konstanta r R takva da vrijedi q(x) = b n 1 x n 1 + b n 2 x n 2 +... + b 1 x + b 0 P n (x) = (x α)q(x) + r () Kako bi odredili koeficijente polinoma q i ostatak r uvrstimo (2) u (). a n x n + a n 1 x n 1 +... + a 1 x + a 0 = (x α)(b n 1 x n 1 + b n 2 x n 2 +... + b 1 x + b 0 ) + r. Izjednačavanjem odgovarajućih koeficijenata dobivamo sljedeći sustav jednadžbi: a n = b n 1, a n 1 = b n 2 αb n 1, a n 2 = b n αb n 2,. a 1 = b 0 αb 1, a 0 = r αb 0 iz kojih možemo izračunati koeficijente polinoma q i koeficijent r. Na sljedećim formulama se temelji tzv. Hornerov algoritam: b n 1 = a n, b n 2 = a n 1 + αb n 1, b n = a n 2 + αb n 2,. b 0 = a 1 + αb 1, r = a 0 + αb 0. 5 William George Horner (1786-187), britanski matematičar 0

Hornerov algoritam zapisan pseudojezikom izgleda ovako: Ulaz: n N, α R, (a n, a n 1,..., a 1, a 0 ) koeficijenti polinoma P n Izlaz: (b n 1, b n 2,..., b 1, b 0 ) koeficijenti polinoma q i konstanta r b n 1 = a n for i = n 1, n 2,..., 1 do b i 1 = a i + αb i end for r = a 0 + αb 0 Općenito, Hornerov algoritam možemo zapisati u obliku tablice: a n a n 1 a 1 a 0 α b n 1 = a n b n 2 = a n 1 + αb n 1 b 0 = a 1 + αb 1 r = a 0 + αb 0 Primjer 5.2.1 Primjenom Hornerovog algoritma treba podijeliti polinom P 5 (x) = x 5 x 2 + 7x + 2 polinomom p(x) = x + 2. Rješenje zapišimo u obliku tablice: 1 0 0-7 2-2 b 4 = 1 b = 2 b 2 = 4 b 1 = 11 b 0 = 29 r = 56 Znamo da je kvocijent q oblika q(x) = b n 1 x n 1 +b n 2 x n 2 +...+b 1 x+b 0 pa dobivamo q(x) = x 4 2x + 4x 2 11x + 29 i ostatak pri dijeljenju r = 56. Tu činjenicu možemo zapisati u obliku P 5 (x) x + 2 = x4 2x + 4x 2 11x + 29 56 x + 2 Napomena 5.2.1 Hornerov algoritam pogodan je za izračunavanje vrijednosti polinoma P n (x) u točki x = α. Naime, iz P n (x) = (x α)q(x) + r za x = α dobivamo P n (x) = r, tj. ostatak pri dijeljenju polinoma P n (x) polinomom p(x) = x α jednak je vrijednosti polinoma P n za x = α. Stoga, u prethodnom primjeru, polinom P n možemo zapisati na sljedeći način: P 5 (x) = (x + 2)(x 4 2x + 4x 2 11x + 29) 56 te za x = 2 dobijemo P 5 ( 2) = 56. Dakle, ostatak pri dijeljenju polinoma P 5 (x) polinomom p(x) = x + 2 jednak je vrijednosti 1

polinoma P 5 za x = 2. Velika prednost primjene Hornerovog algoritma za računanje vrijednosti polinoma P n u točki α je manji broj računskih operacija. Prilikom računanja vrijednosti polinoma P n (x) = a n x n + a n 1 x n 1 +... + a 1 x + a 0 za x = α standardno, tj. P n (α) = a n α n +a n 1 α n 1 +...+a 1 α+a 0 trebalo bi nam n zbrajanja i n+(n 1)+ +2+1 = n(n+1) 2 množenja, dok kod primjene Hornerovog algoritma imamo isto n zbrajanja, ali samo n množenja. Zbog toga je Hornerov algoritam vrlo koristan kod računanja vrijednosti polinoma u velikom broju točaka. Spomenimo još jednu vrlo korisnu primjenu Hornerovog algoritma. Naime, spomenuti algoritam možemo primijeniti ukoliko želimo broj zapisan u bazi b zapisati u dekadskoj bazi. Neka je broj (a n a n 1...a 0 ) b zapisan u nekoj bazi b. Ako ga želimo zapisati u dekadskoj bazi, tada će taj broj izgledati ovako: a n b n +a n 1 b n 1 +...+a 1 b+a 0. Možemo primijetiti da je to zapravo P n (b) = a n b n + a n 1 b n 1 +... + a 1 b + a 0. Prema tome zaključujemo da je vrijednost broja (a n a n 1...a 0 ) b u dekadskoj bazi jednaka ostatku pri dijeljenju polinoma P n (x) polinomom p(x) = x b. Primjer 5.2.2 Broj (2EB1) 16 zapišimo u dekadskom sustavu. Prisjetimo se vrijednosti nekih znamenaka u heksadecimalnom brojevnom sustavu: A = 10 B = 11 C = 12 D = 1 E = 14 F = 15 Da bismo broj (2EB1) 16 zapisali u dekadskom sustavu potrebno je izračunati 2 16 + 14 16 2 + 11 16 + 1. Primjenom Hornerovog algoritma dobivamo: 2 E B 1 16 2 14 + 16 2 = 46 11 + 16 46 = 747 1 + 16 747 = 1195 Dakle, broj (2EB1) 16 u dekadskom sustavu iznosi 1195. Osim toga, cjelokupni rastav polinoma P n (x) = a n x n + a n 1 x n 1 +... + a 1 x + a 0 po potencijama x α može se napraviti jednim proširenim Hornerovim algoritmom. 2

Primjer 5.2. Rastavimo polinom P 4 (x) = x 4 + x + x + 1 po potencijama od x 1. Rješenje zapišimo u obliku tablice: Nakon prvog retka algoritam nastavljamo drugim retkom, zatim trećim itd. Posljednji brojevi u svakom retku traženi su koeficijenti prikaza. 1 1 0 1 1 1 1 1 + 1 1 = 2 0 + 1 2 = 2 1 + 1 2 = 1 + 1 = 4 1 2 + 1 1 = 2 + 1 = 5 + 1 5 = 8 1 + 1 1 = 4 5 + 1 4 = 9 1 4 + 1 1 = 5 Rješenje zapisujemo u obliku: P 4 (x) = (x 1) 4 + 5(x 1) + 9(x 1) 2 + 8(x 1) + 4.

5. Gaussova metoda eliminacije za sustave linearnih jednadžbi Johann Karl Friedrich Gauss (1777. - 1855.) jedan je od najvećih matematičara svih vremena. Svoj doprinos dao je u gotovo svim područjima matematike. Najviše vremena provodio je baveći se gustoćom prostih brojeva, te se procjenjuje da je do kraja života uspio pobrojati sve proste brojeve do 000 000. Takoder, vrlo poznat njegov rezultat iz 1801. godine je prvi pravi dokaz osnovnog teorema aritmetike, te dokaz zakona kvadratnog reciprociteta. Pored teorije brojeva, Gauss se bavio i algebrom. Prvi pravi dokaz osnovnog teorema algebre pripisuje se upravo njemu. Baveći se u razdoblju 180. - 1809. godine problemom odredivanja putanje astroida Pallasa, Gauss je dobio sustav tipa 6 6 koji je riješio metodom koju danas zovemo Gaussova metoda eliminacije. Neka je dan sustav od m linearnih jednadžbi s n nepoznanica: a 11 x 1 + a 12 x 2 + a 1 x + + a 1n x n = b 1 a 21 x 1 + a 22 x 2 + a 2 x + + a 2n x n = b 2 a m1 x 1 + a m2 x 2 + a m x + + a mn x n = b m. Tada definiramo proširenu matricu sustava: a 11 a 12 a 1n b 1 a 21 a 22 a 2n b 2 A =.... a m1 a m2 a mn b m. Da bismo sustav riješili Gaussovom metodom potrebno je proširenu matricu A sustava svesti, pomoću elementarnih transformacija nad njenim recima, na njoj ekvivalentnu gornje trokutastu matricu (matrica kojoj su svi elementi ispod glavne dijagonale jednaki nuli). Pod elementarnim transformacijama nad retcima matrice podrazumijevamo sljedeće: 1. zamjena mjesta dvaju redaka, 2. množenje nekog retka brojem različitim od nule,. dodavanje nekog retka pomnoženog s brojem različitim od nule nekom drugom retku. Rješenje zadanog sustava je uredena n-torka realnih brojeva (x 1, x 2,..., x n ) koja zadovoljava svaku jednadžbu sustava. Razlikujemo tri slučaja: 1. Sustav ima jedinstveno rješenje, 2. Sustav ima beskonačno mnogo rješenja,. Sustav nema rješenja. 4

Primjer 5..1 Riješimo sustav jednadžbi: x + 2y + z = 5 2x y z = 1 x + y + 4z = 6 Rješenje: 1 2 5 2 1 1 1 1 4 6 /( 2) /( 1) 1 2 5 0 5 7 9 0 1 1 1 1 2 5 0 1 1 1 0 5 7 9 /5 1 2 5 0 1 1 1 0 0 2 4 / : ( 2) 1 2 5 0 1 1 1 0 0 1 2 x + 2y + z = 5 (1) y + z = 1 (2) 1 z = 2 () () z = 2 (2) y = 1 z = 1 2 = 1 y = 1 (1) x = 5 2y z = 5 2 ( 1) 2 = 5 + 2 6 = 1 x = 1 Rješenje: x = 1 y = 1 z = 2. Dobili smo jedno jedinstveno rješenje, pa za ovaj sustav linearnih jednadžbi kažemo da je moguć. Sustav nema rješenja, tj. kažemo da nije moguć, ako su u jednom retku lijevo od iscrtkane linije sve nule, a desno od iscrtkane linije neki broj različit od nule. Ako se u jednom retku nalaze sve nule, onda kažemo da sustav ima beskonačno mnogo rješenja. 5

Iz teorije je poznato (Kronecker - Cappelli teorem) da sustav linearnih jednadžbi Ax = b ima rješenje ako i samo ako je r(a) = r([a b]), tj. ako matrica A i proširena matrica [A b] imaju jednak rang. Ako je pri tome rang(a) = rang([a b]) = n, onda sustav ima jedinstveno rješenje. No, ako je rang(a) = rang([a b]) < n, onda sustav ima beskonačno mnogo rješenja. Ako je pak rang(a) < rang([a b]), onda sustav nema rješenja. 5.4 Neki značajni algoritmi u drugoj polovini XX. stoljeća Navedimo neke algoritme koji su značajno utjecali na razvoj znanosti i inženjerstva u drugoj polovini XX. stoljeća, ne ulazeći detaljno u razmatranje tih algoritama već samo opisujući glavne ideje kod njih 6. 5.4.1 Monte Carlo metoda (Metropolis algoritam) Ime metode Monte Carlo uveli su Stanislaw Ulam, John von Neumann i Nicholas Metropolis 1946. godine. Upotrebljava se u različitim područjima znanosti: numeričkoj matematici, fizikalnoj kemiji, statističkoj fizici i ekonomiji. Odnosi se na široku primjenu matematičkih modela i algoritama čija je glavna značajka upotreba slučajnih brojeva u rješavanju različitih problema. Najčešće je riječ o matematičkim problemima za čija rješenja ne postoje učinkoviti numerički algoritmi. Općenito govoreći, da bi se nešto prozvalo Monte Carlo eksperimentom, dovoljno je koristiti nasumične brojeve da bi se ispitali mogući rezultati eksperimenta. 5.4.2 Simplex algoritam Pojam linearne optimizacije predstavlja skupinu metoda koje omogućavaju nalaženje najpovoljnijih rješenja raznovrsnih problema u kojima i funkcija cilja (npr. dobit) i utrošci resursa (npr. materijala ili vremena) imaju linearan oblik ovisnosti o nezavisnim varijablama (npr. o broju proizvedenih proizvoda). Jedna od najviše korištenih metoda linearne optimizacije je linearno programiranje. Metodu je razvio američki matematičar George Dantzig 1947. godine. Neka su c R n, a i R n, b i R, i M = M 1 M 2 M, gdje su M i, i = 1, 2, disjunktni skupovi te f : R n R linearna funkcija zadana formulom f(x) = c T x. Promotrimo sljedeći minimizacijski problem: 6 Barry A. Cipra, The Best of 20th Century: Editors Name Top 10 Algorithms, SIAM News, Volume, Number 4 6

f(x) = c T x min x (1) uz uvjet a T i x b i, i M 1 (2) a T i x b i, i M 2 () a T i x = b i, i M (4) Problem (1-4) zovemo problem linearnog programiranja ili skraćeno LP; pri tome funkciju f zovemo funkcija cilja. Vektor x koji zadovoljava uvjete (2-4) zovemo dopustivo rješenje. Za dopustivo rješenje x takvo da je f(x ) = c T x c T x = f(x), za svako dopustivo rješenje x, kažemo da je optimalno dopustivo rješenje. Ako su A R m n, b R m te c R n, onda minimizacijski problem c T x min x uz uvjet Ax = b x 0 zovemo standardni oblik problema linearnog programiranja ili skraćeno SOLP. Najpoznatiji i najviše korišten algoritam za rješavanje problema linearnog programiranja jest Simplex algoritam. Najprije navedimo sljedeću definiciju: Definicija 5.4.1 Neka su A R m n, b R m. Skup P = {x R n ; Ax b} zovemo konveksan poliedar u R n. Uočimo da je skup P = {x R n ; Ax = b, x 0}, takoder poliedar i zovemo ga poliedar u standardnom obliku. Osnovni oblik Simplex algoritma: 1. odabrati jedno bazično dopustivo rješenje poliedra P = {x R n : Ax = b, x 0} 2. repeat provjeriti sve bridove poliedra P koji izlaze iz odabranog bazičnog dopustivog rješenja; if postoji brid po kojem možemo smanjiti vrijednost funkcije cilja, hodamo po tom bridu dok ne dodemo do sljedećeg bazičnog dopustivog rješenja. Ako takvo bazično dopustivo rješenje ne postoji, poliedar je neomeden i vrijednost funkcije cilja je else repeat bazično dopustivo rješenje je optimalno forever 7