Tehici de programare 2016 ovidiu.baias@aut.upt.ro
Scurtă prezetare Curs 14 săptămâi Test 1 săptămâa 7 Proiect săptămâa 13 Lucrări practice 14 săptămâi Test 2 săptămâa 14 Grilă sesiue
Tehici de programare Aaliza algoritmilor Backtrackig Stiva Poiteri. Lucru pe biți Recursivitate Divide at Impera Programare diamică Greedy
Bibliograie selectivă Tudor Sori, Tehici de programare, Teora, 1995 Corme T.H., Leiserso C.E., Rivest R.R., Itroducere î algoritmi, Agora, 2000 Ivaşc C., Pruă M., Bazele iormaticii, Petrio, 1995 Ataasiu. A, Pitea R., Culegere de probleme pascal, Petrio, 1996 Maz. D, et. al., Iormatica. Culegere de probleme rezolvate şi propuse, Mirto, 2005 Ioescu C., et. al., Iormatica petru grupele de perormaţă, Dacia Educaţioal, 2004 Ciocârlie H., Ciocârlie R., Tehici de programare şi structuri de date, Eurostampa, 2010 http://ocw.mit.edu/courses/electrical-egieerig-ad-computer-sciece/6-00sc-itroductio-to-computer-sciece-ad-programmig-sprig-2011/ http://videolectures.et/mit6046j05_itroductio_algorithms/ https://class.coursera.org/algo-004/lecture
Pricipii geerale. Pași implemetare Aaliză Proiectare Implemetare Îțelegerea corectă a ceriței problemei Veriicarea costrâgerilor timp de execuţie, memorie,... Î ucţie de timpul alocat rezolvării problemei Scriere cod Depaare Testare
Pricipii geerale.idetare/notaţii cod/cometare Idetare K&R, KNF, GNU Notații cod Camel Case / Hugaria Cometare
Stil de programare
Aaliza algoritmilor Problemă Se dă o listă de elemete, A[1..] și u elemet auxiliar x. Să se găsească idexul i, cu proprietatea că A[i]x, 1 i. exemple 2 metode
Căutare liiară Algoritm: LINEARSEARCH Iput: vector A[1..] de elemete și u elemet x. Output: i dacă x A[i], 1 i, și 0 î caz cotrar. câte comparații miim? câte comparații maxim?
Căutare liiară Algoritm: LINEARSEARCH Iput: vector A[1..] de elemete și u elemet x. 1. i 1 Output: i dacă x A[i], 1 i, și 0 î caz cotrar. 2. while i < ad x A[i] câte comparații miim? 3. i i+1 câte comparații maxim? 4. ed while 5. i x A[i] the retur i else retur 0
Căutare biară Algoritm: BINARYSEARCH Iput: vector A[1..] de elemete sortate crescător și elemetul x Output: i dacă x A[i], 1 i, și 0 î caz cotrar. Observație: ie liși l doi idecși ai vectorului A[1..], reprezetâd limita iițială și respectiv limita superioară a uui subvector A[li..l]. Se observă că: A[li] A[li+l/2] A[l] Rezolvare: la iecare pas se va împărți itervalul î jumătate și elemetul x se va căuta î doar uul di cele două itervale de idecși A[li..li+l/2] şi A[li+l/2+1..l], î ucție de valoarea A[li+l/2]. câte comparații miim? câte comparații maxim?
Căutare biară Algoritm: BINARYSEARCH exempliicare elemet căutat x37 Idex i 1 2 3 4 5 6 7 8 9 10 A[1..10] 3 7 12 21 25 26 27 29 37 39 li1, l10 pas 1: k[li+l/2] 5 pas 2: se obți 2 itervale [1..5] și [6..10] pas 3: pt. că A[k]25 < 37 se alege itervalul A[6..10] pas 4: li6, l10, repeta pasul 1 pâă lil sau A[k]x
Căutare biară Algoritm: BINARYSEARCH exempliicare elemet căutat x37 Idex i 6 7 8 9 10 A[6..10] 26 27 29 37 39 k8, A[k]29<37 A[8..10] Idex i 6 7 8 9 10 A[8..10] 26 27 29 37 39 k9, A[k]37 OK http://www.ioarea.ro/blog/cautare-biara
Căutare biară Algoritm: BINARYSEARCH pseudocod 1. li 1; l ; 2. while li l 3. k [li + l / 2] 4. i x A[k] the retur 1 5. else i x < A[k] the l k-1 6. else li k+1 7. ed while 8. retur 0 după iecare pas i, umărul de elemete se îjumătăţeşte: pas i elemete i 2 la ultimul pas, 1 i log 2 1 + 1 2 1 i
Notații asimptotice Ο limita sperioară Θ limita ierioară limita superioară Ω limita ierioară
Notații asimptotice - O Deiiție:., a.î.. şi dacă lui complexitatea spuem că :, ie 0 0 cg cost c Ν g O R g ot Ν., 12 a.î. 1şi că pt., complex. 12 1 2, 10 2 Fie 0 0 3 3 2 3 cg c O ot + +
Notații asimptotice - O., a.î.. şi dacă lui, complexitatea :, 0 0 cg cost c Ν g g O R g ot ot Ν
Notații asimptotice clasiicare algoritmi Ο 1 costat Olog logaritmic O liiar O log supraliiar O 2 patratic O c poliomial O c expoetial O! actorial c - costată
Ordiul/rata de creştere a uui algoritm timpul de execuţie a uui algoritm este o ucţie de dimesiuea datelor de itrare și de complexitatea algoritmului Rata de creştere timp ms 100 90 80 70 60 50 40 30 20 10 log c log c^2 c^3 + 3 2 0 0 5 10 15 20 25 30 date de itrare log + + 3 cu cât creşte cu atât scade importaţa termeilor de grad ierior
Ordiul/rata de creştere a uui algoritm log log O O O O O O 2 3 2 2 7 128 0.007µs 0.128µs 0.89µs 16µs 2ms 31 10 ai 2 8 256 0.008µs 0.256µs 2µs 65µs 16ms 69 10 ai 2 10 1024 0.01µs 1µs 10µs 1ms 1sec 300 10 ai 2 12 4096 0.012µs 4µs 49µs 16ms 68sec 1221 10 ai 20 2 0.02µs 1ms 20ms 18.3mi 37ai 314565 10 ai Operaţii elemetare: i aduare, scadere, îmulţire şi împărţire ii comparaţii şi operatori logici iii atribuiri
Notații asimptotice - Θ Ω, Deiiție: R g Ν :, ie., a.î.. cost şi dacă 0 0 cg c Ν g ot Ω., cost. a.î., şi dacă 2 1 0 2 1 0 g c g c c c Ν g ot Θ
Complexitate P/NP/NP-complet Algoritmi determiistici NP Algoritmi odetermiistici P P Poliomial NP Nodetermiistic Poliomial NP complet NP-complet P NP
Rezumat. Aaliza algoritmilor Căutare liiară vs. Căutare biară Notații asimptotice - O Ordiul/rata de creștere a uui algoritm Tipuri de algoritmi