Dinamičko programiranje Primer 1: Za dati niz naći njegov najduži neopadajući podniz. Defnicija: podniz nekog niza je niz koji se dobija izbacivanjem

Слични документи
6-8. ČAS Celobrojno programiranje Rešavamo sledeći poblem celobrojnog programiranja: Gde pretpostavljamo da je A celobrojna matrica dimenzije,. Takođe

Celobrojno programiranje Rešavamo sledeći poblem celobrojnog programiranja: min c T x Ax = b x 0 x Z n Gde pretpostavljamo da je A celobrojna matrica

Teorija igara

P1.1 Analiza efikasnosti algoritama 1

2015_k2_z12.dvi

Програмирај!

Tutoring System for Distance Learning of Java Programming Language

My_P_Red_Bin_Zbir_Free

My_P_Trigo_Zbir_Free

Microsoft Word - AIDA2kolokvijumRsmerResenja.doc

Grafovi 1. Posmatrajmo graf prikazan na slici sa desne strane. a) Odrediti skup čvorova V i skup grana E posmatranog grafa. Za svaku granu posebno odr

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL 2. kolokvij 29. lipnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1. (

Рационални Бројеви Скуп рационалних бројева 1. Из скупа { 3 4, 2, 4, 11, 0, , 1 5, 12 3 } издвој подскуп: а) природних бројева; б) целих броје

Matematika 1 - izborna

Microsoft Word - Ispitivanje toka i grafik funkcije V deo

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

Vjezbe 1.dvi

13E114PAR, 13S113PAR DOMAĆI ZADATAK 2018/2019. Cilj domaćeg zadatka je formiranje petlje softverske protočnosti za minimalni broj ciklusa.

ALIP1_udzb_2019.indb

SKRIPTE EKOF 2019/20 skripteekof.com Lekcija 1: Brojevni izrazi Lekcija 1: Brojevni izrazi Pregled lekcije U okviru ove lekcije imaćete priliku da nau

1 Polinomi jedne promenljive Neka je K polje. Izraz P (x) = a 0 + a 1 x + + a n x n = n a k x k, x K, naziva se algebarski polinom po x nad poljem K.

1. Vrednost izraza jednaka je: Rexenje Direktnim raqunom dobija se = 4 9, ili kra e S = 1 ( 1 1

VEŽBE IZ OPERACIONIH ISTRAŽIVANJA

Microsoft Word - GRAFICI TRIGONOMETRIJSKIH FUNKCIJA-II deo.doc

Uvod u računarstvo 2+2

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

OSNOVNA ŠKOLA, VI RAZRED MATEMATIKA

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup priro

My_ST_FTNIspiti_Free

Microsoft Word - ASIMPTOTE FUNKCIJA.doc

Microsoft Word - NULE FUNKCIJE I ZNAK FUNKCIJE.doc

Konstrukcija i analiza algoritama Nina Radojičić februar Analiza algoritama, rekurentne relacije 1 Definicija: Neka su f i g dve pozitivne fun

Osnovi programiranja Beleške sa vežbi Smer Računarstvo i informatika Matematički fakultet, Beograd Jelena Tomašević i Sana Stojanović November 7, 2005

Microsoft PowerPoint - C-4-1

Slide 1

08 RSA1

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Uvod u takmičarsko programiranje

СТЕПЕН појам и особине

P11.3 Analiza zivotnog veka, Graf smetnji

Орт колоквијум

Microsoft Word - ASIMPTOTE FUNKCIJE.doc

s2.dvi

Талесова 1 теорема и примене - неки задаци из збирке Дефинициjа 1: Нека су a и b две дужи чиjе су дужине изражене преко мерне jединице k > 0, тако да

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ У ОСНОВНОМ ОБРА

РЕПУБЛИКА СРПСКА МИНИСТАРСТВО ПРОСВЈЕТЕ И КУЛТУРЕ РЕПУБЛИЧКИ ПЕДАГОШКИ ЗАВОД Милоша Обилића 39 Бањалука, Тел/факс 051/ , 051/ ; p

Microsoft Word - 14Celobrojno.doc

MAT KOL (Banja Luka) ISSN (p), ISSN (o) Vol. XX (2)(2014), PELLOVA JEDNAČINA I PITAGORIN

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

Funkcije predavač: Nadežda Jakšić

Algoritmi SŠ P1

Microsoft Word - 6ms001

ЗАДАЦИ ИЗ МАТЕМАТИКЕ ЗА ПРИПРЕМАЊЕ ЗАВРШНОГ ИСПИТА

1 Konusni preseci (drugim rečima: kružnica, elipsa, hiperbola i parabola) Definicija 0.1 Algebarska kriva drugog reda u ravni jeste skup tačaka opisan

Skripte2013

Задатак 4: Центрифугална пумпа познате карактеристике при n = 1450 min -1 пребацује воду из резервоара A и B у резервоар C кроз цевовод приказан на сл

Microsoft Word - 1.Operacije i zakoni operacija

Algoritmi SŠ P1

Programiranje 1 IEEE prikaz brojeva sažetak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, IEEE p

ДРУШТВО ФИЗИЧАРА СРБИЈЕ МИНИСТАРСТВО ПРОСВЕТЕ И СПОРТА РЕПУБЛИКЕ СРБИЈЕ Задаци за републичко такмичење ученика средњих школа 2006/2007 године I разред

Задатак 4: Центрифугална пумпа познате карактеристике при n = 2900 min -1 ради на инсталацији приказаној на слици и потискује воду из резервоара А у р

ПРИРОДА И ЗНАК РЕШЕЊА 2 b ax bx c 0 x1 x2 2 D b 4ac a ( сви задаци су решени) c b D xx 1 2 x1/2 a 2a УСЛОВИ Решења реална и различита D>0 Решења реалн

Microsoft Word - Matematika_kozep_irasbeli_javitasi_0802.doc

Алгебарски изрази 1. Запиши пет произвољних бројевних израза. 2. Израчунај вредност израза: а) : ; б) : (

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Microsoft PowerPoint - X i XI termin - odredjivanje redosleda poslova [Compatibility Mode]

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

УПУТСТВО ЗА КОРИСНИКА Приступ локацији часописа Српски архив за целокупно лекарство добија се преко internet adrese: Након

Teorija skupova - blog.sake.ba

Microsoft Word - Matematika_kozep_irasbeli_javitasi_1112_szerb.doc

UDŽBENIK 2. dio

На основу члана 63. став 1. Закона о јавним набавкама ( Сл. гласник РС, бр. 124/12, 14/15 и 65/15), наручилац Град Београд, Градска управа града Беогр

УПУТСТВО ЗА КОРИСНИКА Приступ локацији часописа Српски архив за целокупно лекарство добија се преко internet adrese: Након

Microsoft Word - 11 Pokazivaci

Microsoft Word - 1. REALNI BROJEVI- formulice

Microsoft Word - 15ms261

СТРАХИЊА РАДИЋ КЛАСИФИКАЦИJА ИЗОМЕТРИJА И СЛИЧНОСТИ Према књизи [1], свака изометриjа σ се може представити ком позици - jом неке транслациjе за векто

Microsoft Word - KVADRATNA FUNKCIJA.doc

MATEMATIKA EKSTERNA PROVJERA ZNANJA UČENIKA NA KRAJU III CIKLUSA OSNOVNE ŠKOLE UPUTSTVO VRIJEME RJEŠAVANJA TESTA: 70 MINUTA Pribor: grafitna olovka i

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Funkcije predavač: Nadežda Jakšić

Kombinatorno testiranje

Електротехнички факултет Универзитета у Београду Катедра за рачунарску технику и информатику Kолоквијум из Интелигентних система Колоквију

Microsoft Word - ZadaciSeminarski.doc

Model podataka

Microsoft Word - 13pavliskova

ЕКОНОМСКИ ФАКУЛТЕТ УНИВЕРЗИТЕТА У ПРИШТИНИ КОСОВСКА МИТРОВИЦА

1. GRUPA Pismeni ispit iz MATEMATIKE Prezime i ime broj indeksa 1. (15 poena) Rexiti matriqnu jednaqinu 3XB T + XA = B, pri qemu

Microsoft Word - Odluka o osnovnim elementima naloga za placanje _3_.doc

Popularna matematika

Microsoft Word - VEROVATNOCA II deo.doc

untitled

Matematka 1 Zadaci za vežbe Oktobar Uvod 1.1. Izračunati vrednost izraza (bez upotrebe pomoćnih sredstava): ( ) [ a) : b) 3 3

(Microsoft Word - Rje\232enja zadataka)

JMBAG IME I PREZIME BROJ BODOVA 1. (ukupno 20 bodova) MJERA I INTEGRAL Popravni ispit 7. rujna (Knjige, bilježnice, dodatni papiri i kalkulatori

Classroom Expectations

Microsoft Word - PARCIJALNI IZVODI I DIFERENCIJALI.doc

Транскрипт:

Dinamičko programiranje Primer 1: Za dati niz naći njegov najduži neopadajući podniz. Defnicija: podniz nekog niza je niz koji se dobija izbacivanjem nekih (moguće nijednog) elemenata polaznog niza. Formalno, za niz Z={z[1],z[2],...,z[k]} kažemo da je podniz niza X={x[1],x[2],...,x[n]}, ako postoji strogo rastući niz celih brojeva (indeksa) i1,i2,...,ik takvih da za svako j od 1 do k važi x[ij] =z[j]. Rešenje: Kao i ranije, formiranje svih podnizova datog niza (sa pamćenjem najdužeg nerastućeg) je loša ideja jer niz dužine n ima 2 n podnizova, pa bi to bio eksponencijalni algoritam. Da bismo dobili ideju kako da odredimo elemente niza koji ostaju u podnizu, analizirajmo problem i strukturu njegovog rešenja. Ako poslednji element x[n] niza X ne učestvuje u najdužem neopadajućem podnizu nnp(x), onda je nnp(x) = nnp(xn-1). Ovde Xk (sa velikim X) označava k-ti prefiks niza X, odnosno niz koji se sastoji od prvih k elemenata niza X. Pretpostavimo sada da x[n] učestvuje kao poslednji element u nnp(x). Neka je pretposlednji član rešenja nnp(x) element x[j]. Želeli bismo da ono što ostane nakon odbacivanja x[n] iz nnp(x), mora da bude nnp niza Xj ili nekog drugog prefiksa niza X, da bismo mogli da zaključimo da problem ima optimalnu podstrukturu. To na žalost to nije tačno, u šta se možemo uveriti na primeru niza X={1, 4, 5, 2, 3, 4}. Očigledno nnp(x) = {1, 2, 3, 4}. Za nnp(x5) = nnp{1, 4, 5, 2, 3} postoje dve mogućnosti: {1, 4, 5} i {1, 2, 3}. Čak i da na neki način izaberemo onu koja nama odgovara (a to je {1, 2, 3}), odbacivanjem broja 3 dobijamo {1, 2}, što nije nnp ni jednog prefiksa niza X. Ovde se pojavljuje drugi, mada sličan problem, koji za razliku od polaznog ima optimalnu podstrukturu. Taj problem je da se za dati niz X nađe najduži neopadajući podniz koji sadrži poslednji element niza takav podniz ćemo označavati nnpk(x). Zaista, nije teško zaključiti (svođenjem na kontradikciju) da odbacivanjem poslednjeg elementa rešenja ovog problema dobijamo rešenje za neki prefiks niza X. Da bismo od ovog zapažanja imali koristi, treba odgovoriti na dva pitanja: - Kakva je veza između ova dva problema, odnosno kako nam umeće nalaženja nnpk pomaže da nađemo nnp? Očigledno je da se nnp(x) mora završiti nekim elementom niza X, pa je nnp(x) jednak nekom, tačnije najdužem od svih nnpk(xk), k=1,n. - Kako da iskoristimo to što problem nalaženja nnpk ima optimalnu podstrukturu, odnosno kako da nađemo nnpk(x) = nnpk(xn) kada znamo sve nnpk(xk) za k<n? Ni ovaj deo problema nije naročito težak: od svih nnpk(xk) treba izabrati onaj koji završava brojem

manjim ili jednakim x[n] i pri tome je najduži takav; nadovezivanjem x[n] na kraj izabranog nnpk(xk) dobija se nnpk(x). Zbog toga što je za nalaženje nnpk(xn) potrebno znati nnpk(xk) za sve k=0, n-1, problem ima preklapajuće podprobleme. Ova osobina čini dinamičko programiranje najpogodnijim načinom za rešavanje ovog problema. U algoritmu koji sledi, d[i] je dužina od nnpk(xi), a p[i] je indeks pretposlednjeg elementa u nnpk(xi). Niz p nam je potreban da bismo mogli lako da rekonstruišemo rešenje. OutputNNP(p, x, i) if i >= 0 OutputNNP(p, x, p[i]); output(x[i]); FindNNP(x, n) d[0] = 1; p[0] = -1; imax = 0; for i = 1 to n-1 dmax = 0; kmax = -1; for k = 0 to n-1 if (x[k] < x[i]) and (dmax < d[k]) dmax = d[k]; kmax = k; d[i] = dmax + 1; p[i] = kmax; if d[imax] < d[i] imax = i; OutputNNP(p, x, imax); Zanimljivost ovog primera je u tome što je za rešavanje problema a bilo potrebno uočiti problem b, koji se može rešiti dinamičkim programiranjem, a uz to se rešavanje problema a može jednostavno svesti na rešavanje problema b.

Primer 2: Dat je niz realnih brojeva A od n elemenata. Odrediti najmanju od vrednosti svih izraza koji se dobijaju ubacivanjem zagrada u izraz a[1]-a[2]-...-a[n]. Rešenje: Neka je poslednje oduzimanje koje se izvršava u optimalnom zagrađivanju k-to oduzimanje sleva na desno. Onda su u izraz levo od k-tog minusa zagrade postavljene tako da on ima minimalnu vrednost, a u izraz desno tako da ima maksimalnu vrednost. Pošto je potrebno da se neki izrazi minimiziraju a neki maksimisiraju, korisno je proširiti početni zadatak, tako da glasi: odrediti raspored zagrada koji minimizira izraz i raspored zagrada koji maksimizira izraz. Neka je sada i-to oduzimanje sleva ono koje se poslednje izvršava pri računanju maksimalne vrednosti izraza. Tada su u prvi deo izraza zagrade tako postavljene da on ima maksimalnu vrednost, a u drugi deo tako da ima minimalnu vrednost. Na osnovu ovog i prethodnog zaključka (o minimumu celog izraza), sledi da proširen problem ima optimalnu podstrukturu. Uvedimo matrice Min i Max, tako da Min[i][j] i Max[i][j] redom sadrže najmanju, odnosno najveću moguću vrednost koju može imati izraz koji počinje sa a[i], a završava sa a[j]. Ove matrice se mogu izračunavati po dijagonalama, počev od glavne. Preciznije, za j = i+1 važiće a za j > i+1 Min[i][j] = Max[i][j] = a[i]-a[j], Max[i][ j] = max{max[i][k] - Min[k +1][ j]} i k< j Min[i][ j] = min{min[i][k] - Max[k +1][ j]} i k< j ili u obliku algoritma: // Popunimo najpre glavnu dijagonalu for k = 1 to n max[k][k] = a[k]; min[k][k] = a[k]; for q = 1 to n-1 // Za dijagonalu na rastojanju q od glavne dijagonale, tj. za izraze sa q oduzimanja for p = 1 to n-q do // za p-ti po redu izraz sa q oduzimanja odredimo minimum i maksimum max[p][p+q] = max[p][p] - min[p+1][p+q];

min[p][p+q] = min[p][p] - max[p+1][p+q]; for k = p+1 to p+q-1 if max[p][k] - min[k+1][p+q] > max[p][p+q] max[p][p+q] = max[p,k] - min[k+1][p+q]; if min[p][k] - max[k+1][p+q] < min[p][p+q] min[p][p+q] = min[p][k] - max[k+1][p+q]; Primetimo uzgred da, kako se u matricama Min i Max koristi samo deo iznad glavne dijagonale, možemo uštedeti prostor tako što koristimo samo jednu matricu M, tako da je za (i<j) Min[i][j] smešteno u M[i][j], a Max[i][j] u M[j][i]. Tražena minimalna vrednost izraza će se po izvršavanju ovog algoritma nalaziti u Min[1][n]. Ukoliko je potrebno ispisati i sam izraz koji ima minimalnu vrednost, mogu se koristiti dve dodatne matrice (ili jedna uz istu napomenu o uštedi memorije), nazovimo ih imin i imax, koje pamte redni broj oduzimanja koje se poslednje izvršava da bi odgovarajući izraz imao najmanju, odnosno najveću vrednost. Tada bi pomoću jednostavne rekurzivne funkcije iz ovih matrica mogao da se iščita i napiše traženi izraz. Ovaj primer je zanimljiv iz dva razloga: prvo, videli smo da tabela koju je potrebno popuniti ne mora uvek da se popunjava redom, to jest po vrstama ili po kolonama ovde je prirodno popunjavati tabelu (matricu) po dijagonalama; i drugo, još zanimljivije, ispostavilo se da je jednostavnije naći maksimume i minimume nego samo minimume. U nekim problemima se isplati čak proširiti polazni problem i rešiti formalno teži (obuhvatniji) zadatak, jer se taj novi problem u stvari jednostavnije rešava nego polazni.

U poslednjem primeru se nećemo detaljno baviti analizom, već ćemo samo opisati postupak rešavanja. Primer je interesantan jer matrica rešenja podproblema ne može direktno da se popunjava redom, kako se to obično radi u jednostavnijim zadacima dinamičkog programiranja. Umesto toga, polazni problem se u suštini rastavlja na dva problema koji se rešavaju popunjavanjem tabele redom, a zatim se rešenja problema delova kombinuju u rešenje polaznog problema. Primer 3: Data je matrica realnih brojeva A, sa m redova i n kolona. Potrebno odrediti najveći zbir koji se može ostvariti kretanjem kroz matricu. Polazi se sa bilo kog polja u prvom redu, a završetak putanje je bilo koje polje u poslednjem redu. Dozvoljeno je kretati se na dole levo i desno, ali bez ponavljanja polja. Uvodimo matricu B, u čija polja upisujemo najveći zbir koji se može sakupiti do tog polja, krećući se na dozvoljen način. Radi jednostavnosti algoritma, dodaćemo matrici nulti red i popuniti ga nulama. Na taj način se popunjavanje prvog reda neće razlikovati od popunjavanja ostalih redova. Ponavljanje polja nije dozvoljeno, pa se u jednom redu matrice ne možemo kretati i nalevo i nadesno, već samo u jednom od ta dva smera. Zato ćemo za svaki red koji nameravamo da popunimo najpre popuniti dva pomoćna niza, L i R, koji će redom sadržati najveće moguće zbirove do odgovarajućih polja u tekućem redu matrice A, krećući se kroz taj red samo na levo (niz L), odnosno samo na desno (niz R). Nakon toga, red matrice B popunjavamo uzimajući za svako njeno polje veći od odgovarajućih zbirova iz nizova L i R. for kol = 1 to n B[0][kol] = 0 for red = 1 to m L[1] = B[red-1][1] + А[red][1]; for kol = 2 to n L[kol] = max{b[red-1][kol], L[kol-1]} + A[red][kol]; R[n] = B[red-1][n] + А[red][n]; for kol = n-1 downto 1 R[kol] = max{b[red-1][kol], R[kol+1]} + A[red][kol]; for kol = 1 to n B[red][kol] = max{l[kol], R[kol]};