27
Složenost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama Nina Radojičić [email protected] Matematčki fakultet februar 2018. Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

  • Upload
    others

  • View
    22

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Konstrukcija i analiza algoritama

Nina Radojičić[email protected]

Matematčki fakultet

februar 2018.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 2: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Sadržaj1 Složenost algoritama

Složenost algoritamaOznake O, Ω, ΘZadaci

2 Dokazivanje korektnosti algoritmaZadaci

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 3: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Sadržaj1 Složenost algoritama

Složenost algoritamaOznake O, Ω, ΘZadaci

2 Dokazivanje korektnosti algoritmaZadaci

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 4: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Složenost algoritama

Postoje 3 mere na osnovu kojih se porede efikasnosti algoritama:1 najgori mogući slučaj,2 prosečan slučaj,3 brzina izvršavanja na unapred određenom skupu instanci (eng.

benchmarks).

Za merenje u druga 2 slučaja potrebno je imati više informacija oproblemu: koji je to prosečan ulaz i koliko se često javlja, kakva jepriroda problema i kakve instance problema se najčešće susreću.U prvom slučaju prednost je što se pomoću matematičkog proračunačesto lako odredi efikasnost nekog algoritma.Prvi način se pokazao dobar i zato je opšte prihvaćen.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 5: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Oznake O, Ω, Θ

Veliko O notacija koristi se za procenu efikasnosti algoritama.

Definicija 1:Neka su f: N→N i g: N→N proizvoljne funkcije argumenta n. Kažemoda je g(n)=O(f(n)) ako postoje pozitivne konstante c ∈ R i N ∈ N,takve da ∀ n ≥ N važi: g(n) ≤ c · f(n).

Napomena: U profesorovoj knjizi prethodna definicija je data za ∀ n >N (što je suštinski isto).

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 6: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Oznake O, Ω, Θ

Oznaka O(f (n)) u stvari se odnosi na klasu funkcija, tako da je

g(n) = O(f (n))

drugi zapis zag(n) ∈ O(f (n))

.

O(1) oznaka za klasu ograničenih funkcija.

Primer:

5n2 + 8 = O(n2) jer je

5n2 + 8 ≤ 112n2

za n ≥ 4, tj. c = 112 ,N = 4

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 7: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Oznake O, Ω, Θ

Funkcije se smeštaju u različite klase u zavisnosti od njihove brzinerasta. U prethodnom primeru se pokazuje da funkcija 5n2 + 8 ne rastebrže od 6 · n2.Umesto

O(a · n + b)

se koristitiO(n),

gde su a i b proizvoljne konstante.Isto važi za O(n2),O(log n) itd...Osnova logartima nije relevantna, što sledi iz jednakosti

loga n = loga(blogbn) = logbn · logab = logbn · c

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 8: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Oznake O, Ω, Θ

Definicija 2:Neka su f:N→N i g:N→N proizvoljne funkcije argumenta n. Kažemo daje f (n) asimptotska donja granica funkcije g(n) i pišemog(n) = Ω(f (n)) ako postoje pozitivne konstante c ∈ R i N ∈ N, takveda ∀n ≥ N važi: g(n) ≥ c · f (n).

Definicija 3:

Ako za funkcije f (n) i g(n) istovremeno važi

g(n) = O(f (n))

ig(n) = Ω(f (n))

onda pišemog(n) = Θ(f (n)).

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 9: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Oznaka O

Važi:O(f (n)) + O(g(n)) = O(f (n) + g(n)),O(f (n)) · O(g(n)) = O(f (n) · g(n)),

a ne važi:O(f (n))− O(g(n)) = O(f (n)− g(n)) (kontraprimer:3n = O(n), 2n = O(n)),O(f (n))/O(g(n)) = O(f (n)/g(n)) (kontraprimer:n = O(n), n = O(n2)).

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 10: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Zadaci

Zadatak 1.

Dokazati da važi: T (n) = 2n2 + n − 1 = Θ(n2).

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 11: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Zadaci

Zadatak 1.

Dokazati da važi: T (n) = 2n2 + n − 1 = Θ(n2).

Nadjimo konstante c1, c2,N, td: ∀ n ≥ N važi:

c1n2 ≤ 2n2 + n − 1 ≤ c2n

2

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 12: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Zadaci

Zadatak 1.

Dokazati da važi: T (n) = 2n2 + n − 1 = Θ(n2).

Nadjimo konstante c1, c2,N, td: ∀ n ≥ N važi:

c1n2 ≤ 2n2 + n − 1 ≤ c2n

2, to jest

c1 ≤ 2 + 1n −

1n2 ≤ c2

Pronalazimo prvo konstante c1 i N1 za koje je zadovoljena levanejednakost, pa konstante c2 i N2 za koje je zadovoljena desnanejednakost.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 13: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Zadaci

Zadatak 1.

Dokazati da važi: T (n) = 2n2 + n − 1 = Θ(n2).

Nadjimo konstante c1, c2,N, td: ∀ n ≥ N važi:

c1n2 ≤ 2n2 + n − 1 ≤ c2n

2, to jest

c1 ≤ 2 + 1n −

1n2 ≤ c2

Pronalazimo prvo konstante c1 i N1 za koje je zadovoljena levanejednakost, pa konstante c2 i N2 za koje je zadovoljena desnanejednakost. Odatle dobijamo c1, c2 i N = maxN1,N2.Jedno rešenje je c1 = 2, c2 = 3,N = 1.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 14: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Zadaci

Zadatak 3.Navesti primer dve monotono rastuće funkcije (niza) f (n) i g(n), takveda nije ni f (n) = O(g(n)), ni g(n) = O(f (n)).

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 15: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Zadaci

Zadatak 3.Navesti primer dve monotono rastuće funkcije (niza) f (n) i g(n), takveda nije ni f (n) = O(g(n)), ni g(n) = O(f (n)).

f (n) =

n!, n parno(n − 1)! + 1, n neparno

(1)

g(n) =

(n − 1)! + 1, n parnon!, n neparno

(2)

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 16: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Rešenje

f (n) =

n!, n parno(n − 1)! + 1, n neparno

(3)

g(n) =

(n − 1)! + 1, n parnon!, n neparno

(4)

Tada je:f (n)

g(n)=

n(1 + 1

(n−1)! )−1, n parno1n (1 + 1

(n−1)! ), n neparno(5)

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 17: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Rešenje

f (n) =

n!, n parno(n − 1)! + 1, n neparno

(6)

g(n) =

(n − 1)! + 1, n parnon!, n neparno

(7)

Tada je:f (n)

g(n)=

n(1 + 1

(n−1)! )−1, n parno1n (1 + 1

(n−1)! ), n neparno(8)

Dakle, ni f (n)/g(n) niti g(n)/f (n) nisu ograničene funkcije.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 18: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Rešenje

f (n)

g(n)=

n(1 + 1

(n−1)! )−1, n parno1n (1 + 1

(n−1)! ), n neparno(9)

Važi da je za parno n:

f (n)/g(n) ≥ n(1 + 1/1)−1 = n/2,

a za neparno n:

g(n)/f (n) ≥ n/2.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 19: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Zadaci

Zadatak 4.Ako elementi niza an zadovoljavaju rekurentnu relaciju:

an+2 + ban+1 + can = 0, n ≥ 0,

gde su b i c konstante i važi a0 = 0, a1 = 1, a2 = 4 i a3 = 37, odreditian.

Zadatak 5.Naći rekurentnu relaciju za broj nizova binarnih brojeva dužine n kojinemaju susedne nule.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 20: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Zadaci

Zadatak 6.Rešiti rekurentnu jednačinu:

a2n+2 − 5a2

n+1 + 4a2n = 0, n ≥ 0

za koju važi a0 = 4 i a1 = 13.

Zadatak 7.Rešiti sledeću rekurentnu jednačinu:

T (n) =n−1∑i=1

T (i) + 1, n ≥ 2

za koju važi T (1) = 1.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 21: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Master teorema:

Rešenje diferencne jednačine: T (n) = aT (nb ) + cnk gde su a,b, c ,k ≥ 0, b 6= 0 je:

T (n) =

O(nlogb a), a > bk

O(nk log n), a > bk

O(nk), a < bk

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 22: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma

Složenost algoritamaOznake O, Ω, ΘZadaci

Master teorema:

Rešenje diferencne jednačine: T (n) = aT (nb ) + cnk gde su a,b, c ,k ≥ 0, b 6= 0 je:

T (n) =

O(nlogb a), a > bk

O(nk log n), a = bk

O(nk), a < bk

Zadatak 8.Rešiti rekurentnu jednačinu:

T (n) = 2T (n

2) + 6n − 1, n ≥ 2

za koju važi T (1) = 1.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 23: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma Zadaci

Dokazivanje korektnosti algoritma

Invarijanta petlje je relacija izmedju promenljivih koja važi nakonsvakog izvršenja bloka naredbi u okviru petlje.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 24: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma Zadaci

Zadaci

Zadatak 1.Napisati algoritam za odredjivanje najvećeg zajedničkog delioca dvaprirodna broja i dokazati korektnost napisanog algoritma.

Rešenje: Euklidov algoritam se bazira na sledećem tvrdjenju:Tvrdjenje: NZD(a, b) = NZD(b, r), pri čemu je r = a mod b.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 25: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma Zadaci

Algoritam nzd(m,n)Ulaz: m,n;Izlaz: nzd; /* najveci zajednicki delioc brojeva m i n */begin

a:=max(m,n);b:=min(m,n);r:=b;while r>0 dobegin

r:=a mod b;a:=b;b:=r;

end;nzd:=a;

end.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 26: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma Zadaci

Zadaci

Zadatak 2.Neka je P funkcija koja prirodni broj n preslikava u prirodni broj saistim ciframa, ali u obrnutom poretku (npr: P(12345) = 54321).Konstruisati algoritam koji za ulaznu vrednost - prirodan broj n,izračunava vrednost P(n). Dokazati korektnost napisanog algoritma.

Dokaz korektnosti izvesti za brojeve n koji se ne završavaju nulom.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama

Page 27: Konstrukcija i analiza algoritamapoincare.matf.bg.ac.rs/~nina/KIAA/KIAAslides2.pdfSloženost algoritama Dokazivanje korektnosti algoritma Konstrukcija i analiza algoritama NinaRadojičić

Složenost algoritamaDokazivanje korektnosti algoritma Zadaci

Algoritam Inverzija(n);Ulaz: n;Izlaz: m; /*vrednost broja sa obrnutim ciframa*/begin

m:=0;k:=n;i:=0;while k>0 dobegin

m:=m*10+k mod 10;k:=k div 10;i:=i+1;

endend.

Nina Radojičić [email protected] Konstrukcija i analiza algoritama