programare s˘i structuri de datemarianzsu/postuniv/curs/curs03.pdf · 2019-12-15 · ce operat˘ii...

170
PROGRAMARE S ¸I STRUCTURI DE DATE CURS 3 Lect. dr. Onet ¸ - Marian Zsuzsanna Facultatea de Matematic˘ si Informatic˘ a UBB ˆ ın colaborare cu NTT Data Lect. dr. Onet ¸ - Marian Zsuzsanna PROGRAMARE S ¸I STRUCTURI DE DATE

Upload: others

Post on 04-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

PROGRAMARE SI STRUCTURI DE DATECURS 3

Lect. dr. Onet - Marian Zsuzsanna

Facultatea de Matematica si Informatica UBBın colaborare cu NTT Data

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 2: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cuprins

Containere ordonate

Complexitati

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 3: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Containere ordonate

Sunt situatii ın care avem nevoie de un anumit container, darne trebuie si ca elementele containerului sa fie ordonate.

Am tot discutat exemplul cu portmoneu. S-ar putea sa vremsa avem bancnotele din portmomenu aranjate ın ordinecrescatoare a valorii.

In aceste situatii putem folosi containere ordonate (sortate),majoritatea containerelor avand si varianta ordonata.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 4: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ordonarea elementelor

Cum putem ordona elementele? De unde stie un container ınce ordine vrem sa fie elementele?

Pentru anumite tipuri de date simple, pare simplu ordonareaelementelor si majoritatea limbajelor de programare auoperatii de comparatie definite

numerele ın general se ordoneaza crescator

stringurile ın general se ordoneaza ın ordine alfabetica

etc.

In general putem defini o ordonare si pentru tipuri definite deutilizator

De exemplu, daca avem tipul Data (compusa din luna, an, zi),putem defini ordonarea ın ordine cronologica.

Daca avem tipul Elev, putem defini ordonarea pe baza numeluisi a prenumelui.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 5: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ordonarea elementelor

Cum putem ordona elementele? De unde stie un container ınce ordine vrem sa fie elementele?

Pentru anumite tipuri de date simple, pare simplu ordonareaelementelor si majoritatea limbajelor de programare auoperatii de comparatie definite

numerele ın general se ordoneaza crescator

stringurile ın general se ordoneaza ın ordine alfabetica

etc.

In general putem defini o ordonare si pentru tipuri definite deutilizator

De exemplu, daca avem tipul Data (compusa din luna, an, zi),putem defini ordonarea ın ordine cronologica.

Daca avem tipul Elev, putem defini ordonarea pe baza numeluisi a prenumelui.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 6: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ordonarea elementelor

Cum putem ordona elementele? De unde stie un container ınce ordine vrem sa fie elementele?

Pentru anumite tipuri de date simple, pare simplu ordonareaelementelor si majoritatea limbajelor de programare auoperatii de comparatie definite

numerele ın general se ordoneaza crescator

stringurile ın general se ordoneaza ın ordine alfabetica

etc.

In general putem defini o ordonare si pentru tipuri definite deutilizator

De exemplu, daca avem tipul Data (compusa din luna, an, zi),putem defini ordonarea ın ordine cronologica.

Daca avem tipul Elev, putem defini ordonarea pe baza numeluisi a prenumelui.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 7: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ordonarea elementelor II

In anumite limbaje de programare (de exemplu C++), putemdefini operatoarele =, >, < pentru tipuri definite de utilizator.

Deci putem scrie data1 < data2 (presupunand ca data1 sidata2 sunt doua variabile de tip Data)

In alte limbaje de programare (de exemplu Java), pentruanumite tipuri exista operatori =, < si >, dar pentru acompara tipuri definite de utilizatori trebuie implementata (sifolosita) o functie separata, numita compareTo.

Deci ın Java, vom folosi data1.compareTo(data2).

compareTo returneaza 0, daca elementele sunt egale, un numarnegativ daca data1 este mai mic (adica vine ınaintea lui data2la ordonare), si un numar pozitiv daca data1 este mai mare

Daca o clasa are implementata operatia compareTo, Java stiesa foloseasca aceasta functie pentru ordonarea elementelor.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 8: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ordonarea elementelor II

In anumite limbaje de programare (de exemplu C++), putemdefini operatoarele =, >, < pentru tipuri definite de utilizator.

Deci putem scrie data1 < data2 (presupunand ca data1 sidata2 sunt doua variabile de tip Data)

In alte limbaje de programare (de exemplu Java), pentruanumite tipuri exista operatori =, < si >, dar pentru acompara tipuri definite de utilizatori trebuie implementata (sifolosita) o functie separata, numita compareTo.

Deci ın Java, vom folosi data1.compareTo(data2).

compareTo returneaza 0, daca elementele sunt egale, un numarnegativ daca data1 este mai mic (adica vine ınaintea lui data2la ordonare), si un numar pozitiv daca data1 este mai mare

Daca o clasa are implementata operatia compareTo, Java stiesa foloseasca aceasta functie pentru ordonarea elementelor.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 9: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ordonarea elementelor III

Presupunand ca avem tipul definit de utilizator Elev (care arenume, prenume, medie, si data nasterii de tip Data), s-arputea sa vrem sa ordonam elevii ın mai multe moduri:

Vrem sa ordonam elevii alfabetic dupa nume si prenume (deex. pentru catalog)

Vrem sa ordonam elevii dupa media lor (de ex. pentru a vedeacine obtine premiul I, II, etc.)

Vrem sa ordonam elevii dupa data nasterii (de ex. pentru avedea cine e cel mai tanar si cel mai batran)

Vrem sa ordonam elevii dupa luna si ziua nasterii (de ex.pentru a vedea cand se sarbatoreste ziua lor de nastere)

In aceste situatii nu ne ajuta operatorul < sau operatiacompareTo (pentru ca au o singura implementare)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 10: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ordonarea elementelor IV

Pentru o flexibilitate mai mare la ordonare, putem presupuneca exista o relatie care ajuta la ordonare.

relatia poate fi considerata ca o functie care primeste caparametru 2 elemente (elementele de comparat) si returneaza:

o valoare booleana (adevarat sau fals), ın functie daca primulparametru e mai mic sau egal decat celalalt (e un fel de <=).

o valoare ıntrega, 0, valoare negativa sau pozitiva (similar curezultatul operatiei compareTo).

In multe limbaje de programare, anumite operatii care aunevoie de o metoda de a compara/ordona elementele, primescca parametru o relatie.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 11: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ordonarea elementelor V

In Java, pentru a defini o relatie, avem nevoie de unComparator.

Comparatorul este o clasa, care contine o functie compare,care are 2 parametri: cele 2 elemente de comparat.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 12: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Colectie ordonata

Colectia ordonata este similara cu Colectia, dar elementelesunt ordonate.

Mai jos aveti lista operatiilor pentru Colectie.

creeaza()col.adauga(e)col.sterge(e)col.dim()col.cauta(e)col.iterator()

Ce operatii credeti ca nu mai exista pentru o Colectieordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Colectie ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 13: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Colectie ordonata

Colectia ordonata este similara cu Colectia, dar elementelesunt ordonate.

Mai jos aveti lista operatiilor pentru Colectie.

creeaza()col.adauga(e)col.sterge(e)col.dim()col.cauta(e)col.iterator()

Ce operatii credeti ca nu mai exista pentru o Colectieordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Colectie ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 14: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Colectie ordonata

Colectia ordonata este similara cu Colectia, dar elementelesunt ordonate.

Mai jos aveti lista operatiilor pentru Colectie.

creeaza()col.adauga(e)col.sterge(e)col.dim()col.cauta(e)col.iterator()

Ce operatii credeti ca nu mai exista pentru o Colectieordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Colectie ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 15: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Colectie ordonata

Colectia ordonata este similara cu Colectia, dar elementelesunt ordonate.

Mai jos aveti lista operatiilor pentru Colectie.

creeaza()col.adauga(e)col.sterge(e)col.dim()col.cauta(e)col.iterator()

Ce operatii credeti ca nu mai exista pentru o Colectieordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Colectie ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 16: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Colectie ordonata

Colectia ordonata este similara cu Colectia, dar elementelesunt ordonate.

Mai jos aveti lista operatiilor pentru Colectie.

creeaza()col.adauga(e)col.sterge(e)col.dim()col.cauta(e)col.iterator()

Ce operatii credeti ca nu mai exista pentru o Colectieordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Colectie ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 17: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Colectie ordonata II

Exista o singura diferenta dintre interfata Colectiei si aColectiei ordonate:

La operatia creeaza, se transmite ca parametru o relatie, carespecifica ordinea ın care elementele trebuie ordonate.

Daca restul operatiilor sunt la fel, de unde putem sa vedemdaca avem o Colectie sau o Colectie ordonata?

Diferenta dintre Colectie si Colectia ordonata se vede ınmomentul ın care folosim iteratorul sa parcurgem elementele:

La Colectie elementele pot fi parcurse ın orice ordineLa Colectia ordonata iteratorul trebuie sa returneze elementeleordonate dupa relatie.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 18: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Colectie ordonata II

Exista o singura diferenta dintre interfata Colectiei si aColectiei ordonate:

La operatia creeaza, se transmite ca parametru o relatie, carespecifica ordinea ın care elementele trebuie ordonate.

Daca restul operatiilor sunt la fel, de unde putem sa vedemdaca avem o Colectie sau o Colectie ordonata?

Diferenta dintre Colectie si Colectia ordonata se vede ınmomentul ın care folosim iteratorul sa parcurgem elementele:

La Colectie elementele pot fi parcurse ın orice ordineLa Colectia ordonata iteratorul trebuie sa returneze elementeleordonate dupa relatie.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 19: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Multime ordonata

Multimea ordonata este similara cu Multimea, dar elementelesunt ordonate.

Mai jos aveti lista operatiilor pentru Multime.

creeaza()mul.adauga(e)mul.sterge(e)mul.dim()mul.cauta(e)mul.iterator()

Ce operatii credeti ca nu mai exista pentru o Multimeordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Multime ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 20: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Multime ordonata

Multimea ordonata este similara cu Multimea, dar elementelesunt ordonate.

Mai jos aveti lista operatiilor pentru Multime.

creeaza()mul.adauga(e)mul.sterge(e)mul.dim()mul.cauta(e)mul.iterator()

Ce operatii credeti ca nu mai exista pentru o Multimeordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Multime ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 21: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Multime ordonata

Multimea ordonata este similara cu Multimea, dar elementelesunt ordonate.

Mai jos aveti lista operatiilor pentru Multime.

creeaza()mul.adauga(e)mul.sterge(e)mul.dim()mul.cauta(e)mul.iterator()

Ce operatii credeti ca nu mai exista pentru o Multimeordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Multime ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 22: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Multime ordonata II

Similar cu Colectia ordonata, si la Multimea ordonata exista osingura diferenta ın interfata: operatia creeaza primeste caparametru o relatie care este folosita pentru ordonareaelementelor.

Iteratorul si la Multimea ordonata trebuie sa returnezeelementele ordonate dupa relatiei.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 23: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Multime ordonata ın Java

In Java exista multime ordonata, se numeste SortedSet.

Lista operatiilor pentru SortedSet se gaseste la adresa:https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html

Lista de la adresa de mai sus contine operatiile care sunt ın plus, fata de

operatiile de la Set

(https://docs.oracle.com/javase/8/docs/api/java/util/Set.html)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 24: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Lista ordonata

Lista ordonata este similara cu Lista, dar elementele suntordonate pe baza unei relatii

Mai jos aveti lista operatiilor pentru Lista

creeaza()

lst.adaugaSfarsit(e)

lst.adaugaPozitie(e, poz)

lst.modifica(e, poz)

lst.cauta(e)

lst.dim()

lst.sterge(e)

lst.sterge(poz)

lst.element(poz)

lst.pozitie(e)

lst.vida()

lst.iterator()

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 25: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Lista ordonata II

Ce operatii credeti ca nu mai exista pentru o Lista ordonata?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Lista ordonata?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 26: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Lista ordonata III

La Lista ordonata exista mai multe diferente:

operatia creeaza primeste ca parametru o relatie

nu mai exista operatia adaugaSfarsit si adaugaPozitie, doar osingura operatie de adauga.

nu exista operatia modifica

Iteratorul trebuie sa returneze elementele ordonate duparelatie.

Daca folosim pozitiile pentru a accesa elementele, ele trebuiesa fie ordonate (elementul de pe prima pozitie este ”cel maimic”, etc.).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 27: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Coada cu Prioritati

Coada cu prioritati (Priority Queue ın engleza) este uncontainer ın care fiecare element are asociat o prioritate.

O coada cu prioritati functioneaza dupa principiul HighestPriority First - putem accesa doar elementul cu prioritatemaxima.

La stergerea unui element, se sterge automat elementul cuprioritatea maxima.

Adaugarea se face ın asa fel ıncat sa respectam relatia deordine ıntre prioritati.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 28: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Coada cu prioritati - Interfata I

Coada cu prioritati are aceeasi operatii ca Stiva si Coada,numai sunt niste diferente date de prezenta prioritatilor si arelatiei R.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 29: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Coada cu prioritati - Interfata II

creeaza(R)

Descriere: creaza o coada cu prioritati noua, vida

Pre: R este o relatie (functie)

Post: o Coada cu Prioritati vida este creata

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 30: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Coada cu prioritati - Interfata III

cp.adauga(e, p)

Desciere: adauga un element cu o prioritate ın coada cuprioritati

Pre: cp este o Coada cu Prioritati, e este TElement, p esteprioritatea elementului

Post: elementul e cu prioritatea p este adaugat ın cp

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 31: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Coada cu prioritati - Interfata IV

cp.sterge()

Descriere: sterge elementul cu prioritatea maxima sireturneaza elementul sters cu prioritatea lui.

Pre: cp este o Coada cu Prioritati, cp nu este vida

Post: din cp se sterge elementul e cu prioritatea p, e este unTElement, e este elementul cu prioritatea maxima, stergereturneaza (e, p) - returnam o pereche formata din element siprioritate.

Arunca: exceptie, daca cp este vida.

Obs: Daca sunt mai multe elemente cu prioritate maximaoricare poate fi sters.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 32: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Coada cu prioritati - Interfata V

cp.element()

Descriere: returneaza elementul cu prioritate maximaımpreuna cu prioritatea lui, dar nu ıl sterge

Pre: cp este o Coada cu Prioritati, cp nu este vida

Post: element returneaza (e, p), e este un TElement, e esteelementul cu prioritatea maxima ın cp, p este prioritatea lui e.

Arunca: exceptie, daca cp este vida

Obs: Daca sunt mai multe elemente cu prioritate maximaoricare poate fi returnat.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 33: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Coada cu prioritati - Interfata VI

cp.vida()

Descriere: verifica daca coada cu prioritati este vida

Pre: cp este o Coada cu Prioritati

Post: vida returneaza Adevarat, daca cp nu contine niciunelement, Fals, altfel.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 34: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Coada cu prioritati - Interfata VII

Observatie: Coada cu Prioritati nu poate fi iterata, nu areiterator! Nu avem metode de a vedea toate elementele Coziicu Prioritati, doar cel cu prioritate maxima. (Daca vrem savedem restul elementelor trebuie sa tot stergem din coada cuprioritati).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 35: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Coada cu Prioritati ın Java

In Java exista TAD Coada cu Prioritati, se numeste PriorityQueue.

Lista operatiilor pentru Priority Queue se gaseste la adresa:https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 36: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Dictionar ordonat

Un dictionar contine perechi cheie-valoare. Cum se ordoneazaelementele unui dictionar?

Dictionarul ordonat este similar cu Dictionar, dar cheile suntordonate (perechile sunt ordonate dupa chei).

Mai jos aveti lista operatiilor pentru Dictionar.

creeaza()d.adauga(c, v)d.sterge(c)d.dim()d.cauta(c)d.iterator()

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 37: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Dictionar ordonat

Un dictionar contine perechi cheie-valoare. Cum se ordoneazaelementele unui dictionar?

Dictionarul ordonat este similar cu Dictionar, dar cheile suntordonate (perechile sunt ordonate dupa chei).

Mai jos aveti lista operatiilor pentru Dictionar.

creeaza()d.adauga(c, v)d.sterge(c)d.dim()d.cauta(c)d.iterator()

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 38: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Dictionar ordonat

Un dictionar contine perechi cheie-valoare. Cum se ordoneazaelementele unui dictionar?

Dictionarul ordonat este similar cu Dictionar, dar cheile suntordonate (perechile sunt ordonate dupa chei).

Mai jos aveti lista operatiilor pentru Dictionar.

creeaza()d.adauga(c, v)d.sterge(c)d.dim()d.cauta(c)d.iterator()

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 39: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Dictionar ordonat II

Ce operatii credeti ca nu mai exista pentru un Dictionarordonat?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la Dictionarul ordonat?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 40: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD Dictionar ordonat III

Exista o singura diferenta ın interfata Dictionarului ordonat:operatia creeaza primeste ca parametru o relatie care estefolosita pentru ordonarea cheilor.

Iteratorul trebuie sa returneze perechile ordonate dupa relatiacheilor.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 41: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Dictionar ordonat ın Java

In Java exista dictionarul ordonat, se numeste SortedMap.

Lista operatiilor pentru SortedMap se gaseste la adresa:https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html

Lista de la adresa de mai sus contine operatiile care sunt ın plus, fata de

operatiile de la Map

(https://docs.oracle.com/javase/8/docs/api/java/util/Map.html)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 42: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD MultiDictionar ordonat

Un multidictionar contine perechi cheie-valoare, iar o cheiepoate sa aiba mai multe valori asociate. Cum se ordoneazaelementele unui multidictionar?

MultiDictionarul ordonat este similar cu MultiDictionar, darcheile sunt ordonate (perechile sunt ordonate dupa chei).Daca o cheie are mai multe valori asociate, acele valori pot fiın orice ordine, nu ordonam dupa valori.

Mai jos aveti lista operatiilor pentru MultiDictionar.

creeaza()md.adauga(c, v)md.sterge(c, v)md.dim()md.cauta(c)md.iterator()

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 43: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD MultiDictionar ordonat

Un multidictionar contine perechi cheie-valoare, iar o cheiepoate sa aiba mai multe valori asociate. Cum se ordoneazaelementele unui multidictionar?

MultiDictionarul ordonat este similar cu MultiDictionar, darcheile sunt ordonate (perechile sunt ordonate dupa chei).Daca o cheie are mai multe valori asociate, acele valori pot fiın orice ordine, nu ordonam dupa valori.

Mai jos aveti lista operatiilor pentru MultiDictionar.

creeaza()md.adauga(c, v)md.sterge(c, v)md.dim()md.cauta(c)md.iterator()

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 44: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD MultiDictionar ordonat

Un multidictionar contine perechi cheie-valoare, iar o cheiepoate sa aiba mai multe valori asociate. Cum se ordoneazaelementele unui multidictionar?

MultiDictionarul ordonat este similar cu MultiDictionar, darcheile sunt ordonate (perechile sunt ordonate dupa chei).Daca o cheie are mai multe valori asociate, acele valori pot fiın orice ordine, nu ordonam dupa valori.

Mai jos aveti lista operatiilor pentru MultiDictionar.

creeaza()md.adauga(c, v)md.sterge(c, v)md.dim()md.cauta(c)md.iterator()

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 45: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD MultiDictionar ordonat II

Ce operatii credeti ca nu mai exista pentru un MultiDictionarordonat?

Ce operatii credeti ca sunt diferite (antetul, nuimplementarea) la MultiDictionarul ordonat?

Credeti ca sunt operatii care ar trebui adaugate ın interfata?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 46: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

TAD MultiDictionar ordonat III

Exista o singura diferenta ın interfata MultiDictionaruluiordonat: operatia creeaza primeste ca parametru o relatie careeste folosita pentru ordonarea cheilor.

Iteratorul trebuie sa returneze perechile ordonate dupa relatiacheilor.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 47: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Un exemplu

In seminarul 2 ati discutat despre problema cu bete: Avem Nbete, si lungimea fiecarui bat, care este un numar pozitiv.Cand se face o operatie de taiere pe aceste N bete, lungimeafiecarui bat este redus cu lungimea celui mai scurt bat.Operatia de taiere se repeta pana cand nu mai avem delocbete, considerand tot timpul minimul actual dintre lungimi.Afisati numarul de bete ınainte de fiecare operatie de taiere.

De exemplu, pentru lungimile: [5, 4, 4, 2, 2, 8] vom avea:

[5, 4, 4, 2, 2, 8], minimul e 2[3, 2, 2, 6], minimul e 2[1, 4], minimul e 1[4], minimul e 4

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 48: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Un exemplu II

Ati discutat 2 variante de solutii pentru aceasta problema:1 O varianta ın care:

cautam minimul (ignorand posibile valori de 0)reducem toate lungimile nonzero cu lungimea minimanumaram cate valori non-zero ramanrepetam pasii de mai sus, pana nu mai avem valori non-zero

2 O varianta ın care:

am sortat array-ul de lungimi descrescatoram cautat minimul array-ului (ignorand posibile valori 0 lafinalul array-ului)am scazut minimul din fiecare valoare non-zerorepetam pasul de mai sus, pana nu mai avem valori non-zero

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 49: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Un exemplu III

Care varianta vi se pare mai buna (optima)?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 50: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Analiza empirica

Analiza empirica ınseamna implementarea algoritmilor,executarea lor si masurarea timpului de executie pentru avedea care algoritm este mai bun.

N Varianta 1 Varianta 210000 0.53 0.26

20000 2.17 1.15

40000 9.83 5.16

100000 53.92 32.43

200000 218.27 130.29

Table: Timp de rulare ın secunde

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 51: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Analiza empirica

Analiza empirica ınseamna implementarea algoritmilor,executarea lor si masurarea timpului de executie pentru avedea care algoritm este mai bun.

N Varianta 1 Varianta 210000 0.53 0.26

20000 2.17 1.15

40000 9.83 5.16

100000 53.92 32.43

200000 218.27 130.29

Table: Timp de rulare ın secunde

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 52: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Examplu 2

O analiza similara am facut si pentru problema cu sume,discutata ieri: Sa se citeasca un array de n elemente si saverifice daca exista ın tablou o pozitie i, astfel ıncat sumaelementelor ın stanga pozitiei este egala cu suma elementelorın dreapta pozitiei (elementul de pe pozitia i nu se adauga ınsume). Daca ıntr-o parte nu exista elemente, suma seconsidera 0.

Varianta 1: tot recalculam sumele dintre 2 pozitiiVarianta 2: retinem cele 2 sume, stanga si dreapta, si candavansam cu o pozitie, pur si simplu adunam elementul urmatorla suma stanga, si scadem un element din suma dreapta.

Care varianta vi se pare mai buna?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 53: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Analiza empirica exemplu 2

N Varianta 1 Varianta 250000 1.51 0.0006

100000 5.79 0.0011

200000 24.28 0.0013

400000 98.36 0.0018

1000000 648.98 0.0027

2000000 - 0.006

4000000 - 0.012

10000000 - 0.022

20000000 - 0.045

Table: Timp de rulare ın secunde

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 54: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Analiza empirica

Desi analiza empirica poate sa ne ofere informatii utile despretimpul de rulare, ın general nu e o varianta practica saimplementam mai multe variante de algoritmi.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 55: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitati

Sunt foarte multe probleme care pot fi rezolvate ın mai multefeluri. Pentru a compara solutiile si a determina care este maibuna se foloseste complexitatea algoritmului.

In general sunt considerate doua criterii importante candmasuram performata unui algoritm: timpul necesar pentru aobtine solutia problemei si spatiul - memoria utilizata pentrustocarea datelor necesare. Astfel, exista complexitate de timpsi complexitate de spatiu.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 56: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitati

Sunt foarte multe probleme care pot fi rezolvate ın mai multefeluri. Pentru a compara solutiile si a determina care este maibuna se foloseste complexitatea algoritmului.

In general sunt considerate doua criterii importante candmasuram performata unui algoritm: timpul necesar pentru aobtine solutia problemei si spatiul - memoria utilizata pentrustocarea datelor necesare. Astfel, exista complexitate de timpsi complexitate de spatiu.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 57: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Desi se numeste complexitate de timp, acest tip decomplexitate nu se masoara ın milisecunde, secunde, minute,etc., pentru ca aceste valori depind foarte mult de calculatorulpe care rulam codul.

Pentru a calcula complexitatea de timp al unui algoritm, estenecesar sa consideram ın primul rand numarul de operatiielementare efectuate de algoritm.

Operatiile elementare sunt citirea, afisarea, atribuirea,comparatia, adunarea, etc.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 58: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemplu

Sa consideram o problema mai simpla (decat problema cubete sau cu sume): Sa calculam si sa afisam suma primelor nnumere naturale.

De exemplu, pentru n = 4 solutia este 1+2+3+4 = 10, iarpentru n = 10 solutia este 55.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 59: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemplu 2 - Prima implementare

Prima varianta de implementare este sa folosim un ciclu(pentru sau cattimp), pentru a calcula suma, adunand perand fiecare element.

subalgorithm suma1(n: integer) is:suma, i: integersuma = 0i = 1while i <= n execute

suma = suma + ii = i + 1

end whileprint ”Suma este: ” + suma

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 60: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemplu 2 - A doua implementare

O alta solutie este sa ne aducem aminte ca exista o formulapentru a calcula suma primelor n numere:

n ∗ (n + 1)

2

subalgorithm suma2(n: integer) is:suma: integersuma = n * (n+1) / 2print ”Suma este” + suma

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 61: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemplu 2 - A doua implementare

O alta solutie este sa ne aducem aminte ca exista o formulapentru a calcula suma primelor n numere:

n ∗ (n + 1)

2

subalgorithm suma2(n: integer) is:suma: integersuma = n * (n+1) / 2print ”Suma este” + suma

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 62: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp II

Cate operatii elementare sunt efectuate de prima varianta desolutie?

subalgorithm suma1(n: ınteger) is:suma, i: integersuma = 0i = 1while i <= n execute

suma = suma + ii = i + 1

end whileprint ”Suma este: ” + suma

end subalgorithm

De foarte multe ori numarul de operatii depinde de datele deintrare, ın cazul nostru de n. Sa calculam numarul de operatiipentru n = 5.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 63: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp II

Cate operatii elementare sunt efectuate de prima varianta desolutie?

subalgorithm suma1(n: ınteger) is:suma, i: integersuma = 0i = 1while i <= n execute

suma = suma + ii = i + 1

end whileprint ”Suma este: ” + suma

end subalgorithm

De foarte multe ori numarul de operatii depinde de datele deintrare, ın cazul nostru de n. Sa calculam numarul de operatiipentru n = 5.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 64: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma1

definirea variabilelor suma si i - 2 operatii

suma = 0 - o operatie

i = 1 - o operatie

ın ciclul cattimp avem urmatoarele operatii:

i <= 5 - o operatie (dar se executa de 6 ori: pentru valorile 1,2, 3, 4, 5, 6 ale variabilei i)suma = suma + i - 2 operatii (adunare si atribuire) (dar seexecuta de 5 ori: pentru valorile 1, 2, 3, 4, 5 ale variabile i)i = i + 1 - 2 operatii (adunare si atribuire) (dar se executa de5 ori: pentru valorile 1, 2, 3, 4, 5 ale variabilei i)

afisarea - o operatie

In total pentru n = 5, vom avea 2 + 1 + 1 + 6 + 10 + 10 +1 = 31 operatii

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 65: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma1

Cate operatii vom avea pentru numarul n = 10?

Vom avea 2 + 1 + 1 + 11 + 20 + 20 + 1 = 56 operatii

Cate operatii vom avea pentru numarul n = 30?

Vom avea 2 + 1 + 1 + 31 + 60 + 60 + 1 = 156 operatii

Cate operatii avem pentru numarul n?

Vom avea 2 + 1 + 1 + n+1 + 2*n + 2*n + 1 = 5*n + 6operatii. Numarul de operatii pentru un algoritm care are datede intrare de marime n, se noteaza cu T(n). Deci, ın cazulalgoritmului suma1 avem T (n) = 5 ∗ n + 6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 66: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma1

Cate operatii vom avea pentru numarul n = 10?

Vom avea 2 + 1 + 1 + 11 + 20 + 20 + 1 = 56 operatii

Cate operatii vom avea pentru numarul n = 30?

Vom avea 2 + 1 + 1 + 31 + 60 + 60 + 1 = 156 operatii

Cate operatii avem pentru numarul n?

Vom avea 2 + 1 + 1 + n+1 + 2*n + 2*n + 1 = 5*n + 6operatii. Numarul de operatii pentru un algoritm care are datede intrare de marime n, se noteaza cu T(n). Deci, ın cazulalgoritmului suma1 avem T (n) = 5 ∗ n + 6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 67: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma1

Cate operatii vom avea pentru numarul n = 10?

Vom avea 2 + 1 + 1 + 11 + 20 + 20 + 1 = 56 operatii

Cate operatii vom avea pentru numarul n = 30?

Vom avea 2 + 1 + 1 + 31 + 60 + 60 + 1 = 156 operatii

Cate operatii avem pentru numarul n?

Vom avea 2 + 1 + 1 + n+1 + 2*n + 2*n + 1 = 5*n + 6operatii. Numarul de operatii pentru un algoritm care are datede intrare de marime n, se noteaza cu T(n). Deci, ın cazulalgoritmului suma1 avem T (n) = 5 ∗ n + 6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 68: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma1

Cate operatii vom avea pentru numarul n = 10?

Vom avea 2 + 1 + 1 + 11 + 20 + 20 + 1 = 56 operatii

Cate operatii vom avea pentru numarul n = 30?

Vom avea 2 + 1 + 1 + 31 + 60 + 60 + 1 = 156 operatii

Cate operatii avem pentru numarul n?

Vom avea 2 + 1 + 1 + n+1 + 2*n + 2*n + 1 = 5*n + 6operatii. Numarul de operatii pentru un algoritm care are datede intrare de marime n, se noteaza cu T(n). Deci, ın cazulalgoritmului suma1 avem T (n) = 5 ∗ n + 6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 69: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma1

Cate operatii vom avea pentru numarul n = 10?

Vom avea 2 + 1 + 1 + 11 + 20 + 20 + 1 = 56 operatii

Cate operatii vom avea pentru numarul n = 30?

Vom avea 2 + 1 + 1 + 31 + 60 + 60 + 1 = 156 operatii

Cate operatii avem pentru numarul n?

Vom avea 2 + 1 + 1 + n+1 + 2*n + 2*n + 1 = 5*n + 6operatii. Numarul de operatii pentru un algoritm care are datede intrare de marime n, se noteaza cu T(n). Deci, ın cazulalgoritmului suma1 avem T (n) = 5 ∗ n + 6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 70: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma1

Cate operatii vom avea pentru numarul n = 10?

Vom avea 2 + 1 + 1 + 11 + 20 + 20 + 1 = 56 operatii

Cate operatii vom avea pentru numarul n = 30?

Vom avea 2 + 1 + 1 + 31 + 60 + 60 + 1 = 156 operatii

Cate operatii avem pentru numarul n?

Vom avea 2 + 1 + 1 + n+1 + 2*n + 2*n + 1 = 5*n + 6operatii. Numarul de operatii pentru un algoritm care are datede intrare de marime n, se noteaza cu T(n). Deci, ın cazulalgoritmului suma1 avem T (n) = 5 ∗ n + 6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 71: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma2

Cate operatii sunt efectuate de algoritmul suma2 pentru n =5?

subalgorithm suma2(n: integer) is:suma: integersuma = n * (n+1) / 2print ”Suma este” + suma

end subalgorithm

6 operatii

Si pentru n = 10? n = 30? numarul n?

Tot 6 operatii. Indiferent de ce numar avem ca parametru,algortimul suma2 va efectua 6 operatii, deci T(n) = 6.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 72: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma2

Cate operatii sunt efectuate de algoritmul suma2 pentru n =5?

subalgorithm suma2(n: integer) is:suma: integersuma = n * (n+1) / 2print ”Suma este” + suma

end subalgorithm

6 operatii

Si pentru n = 10? n = 30? numarul n?

Tot 6 operatii. Indiferent de ce numar avem ca parametru,algortimul suma2 va efectua 6 operatii, deci T(n) = 6.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 73: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma2

Cate operatii sunt efectuate de algoritmul suma2 pentru n =5?

subalgorithm suma2(n: integer) is:suma: integersuma = n * (n+1) / 2print ”Suma este” + suma

end subalgorithm

6 operatii

Si pentru n = 10? n = 30? numarul n?

Tot 6 operatii. Indiferent de ce numar avem ca parametru,algortimul suma2 va efectua 6 operatii, deci T(n) = 6.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 74: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Numarul de operatii pentru suma2

Cate operatii sunt efectuate de algoritmul suma2 pentru n =5?

subalgorithm suma2(n: integer) is:suma: integersuma = n * (n+1) / 2print ”Suma este” + suma

end subalgorithm

6 operatii

Si pentru n = 10? n = 30? numarul n?

Tot 6 operatii. Indiferent de ce numar avem ca parametru,algortimul suma2 va efectua 6 operatii, deci T(n) = 6.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 75: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

T(n) - adica numarul de operatii - nu este complexitateaalgoritmului. Ceea ce ne intereseaza pentru a calculacomplexitatea este cum se modifica valoarea T(n), daca semodifica valoarea lui n? Cat de repede creste valoarea T(n),daca creste valoarea lui n?

Pentru algoritmul suma1 am calculat ca T (n) = 5 ∗ n + 6.Cat va fi T (n) daca dublam n-ul?

T (2 ∗ n) = 10 ∗ n + 6, adica T (2 ∗ n) ≈ 2 ∗ T (n)

Pentru algoritmul suma2 am calculat ca T (n) = 6 indiferentde valoarea lui n. Adica, T (2 ∗ n) = T (n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 76: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

T(n) - adica numarul de operatii - nu este complexitateaalgoritmului. Ceea ce ne intereseaza pentru a calculacomplexitatea este cum se modifica valoarea T(n), daca semodifica valoarea lui n? Cat de repede creste valoarea T(n),daca creste valoarea lui n?

Pentru algoritmul suma1 am calculat ca T (n) = 5 ∗ n + 6.Cat va fi T (n) daca dublam n-ul?

T (2 ∗ n) = 10 ∗ n + 6, adica T (2 ∗ n) ≈ 2 ∗ T (n)

Pentru algoritmul suma2 am calculat ca T (n) = 6 indiferentde valoarea lui n. Adica, T (2 ∗ n) = T (n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 77: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

T(n) - adica numarul de operatii - nu este complexitateaalgoritmului. Ceea ce ne intereseaza pentru a calculacomplexitatea este cum se modifica valoarea T(n), daca semodifica valoarea lui n? Cat de repede creste valoarea T(n),daca creste valoarea lui n?

Pentru algoritmul suma1 am calculat ca T (n) = 5 ∗ n + 6.Cat va fi T (n) daca dublam n-ul?

T (2 ∗ n) = 10 ∗ n + 6, adica T (2 ∗ n) ≈ 2 ∗ T (n)

Pentru algoritmul suma2 am calculat ca T (n) = 6 indiferentde valoarea lui n. Adica, T (2 ∗ n) = T (n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 78: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

T(n) - adica numarul de operatii - nu este complexitateaalgoritmului. Ceea ce ne intereseaza pentru a calculacomplexitatea este cum se modifica valoarea T(n), daca semodifica valoarea lui n? Cat de repede creste valoarea T(n),daca creste valoarea lui n?

Pentru algoritmul suma1 am calculat ca T (n) = 5 ∗ n + 6.Cat va fi T (n) daca dublam n-ul?

T (2 ∗ n) = 10 ∗ n + 6, adica T (2 ∗ n) ≈ 2 ∗ T (n)

Pentru algoritmul suma2 am calculat ca T (n) = 6 indiferentde valoarea lui n. Adica, T (2 ∗ n) = T (n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 79: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm pt care T(n) este functiade mai jos. Cat este T(2*n) pentru fiecare functie(aproximativ)?

T(n) = 10*n + 1

T(2*n) = 20*n + 1 ≈ 2 * T(n) = 20*n + 2T(n) = 7*n + 10T(2*n) = 14* n + 10 ≈ 2 * T(n) = 14*n + 20T(n) = 2*n + 99T(2*n) = 4*n + 99 ≈ 2* T(n) = 4*n + 198 (ın special dacan e mare, nu conteaza diferenta dintre T(2*n) si 2 * T(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 80: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm pt care T(n) este functiade mai jos. Cat este T(2*n) pentru fiecare functie(aproximativ)?

T(n) = 10*n + 1T(2*n) = 20*n + 1 ≈ 2 * T(n) = 20*n + 2T(n) = 7*n + 10

T(2*n) = 14* n + 10 ≈ 2 * T(n) = 14*n + 20T(n) = 2*n + 99T(2*n) = 4*n + 99 ≈ 2* T(n) = 4*n + 198 (ın special dacan e mare, nu conteaza diferenta dintre T(2*n) si 2 * T(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 81: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm pt care T(n) este functiade mai jos. Cat este T(2*n) pentru fiecare functie(aproximativ)?

T(n) = 10*n + 1T(2*n) = 20*n + 1 ≈ 2 * T(n) = 20*n + 2T(n) = 7*n + 10T(2*n) = 14* n + 10 ≈ 2 * T(n) = 14*n + 20T(n) = 2*n + 99

T(2*n) = 4*n + 99 ≈ 2* T(n) = 4*n + 198 (ın special dacan e mare, nu conteaza diferenta dintre T(2*n) si 2 * T(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 82: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm pt care T(n) este functiade mai jos. Cat este T(2*n) pentru fiecare functie(aproximativ)?

T(n) = 10*n + 1T(2*n) = 20*n + 1 ≈ 2 * T(n) = 20*n + 2T(n) = 7*n + 10T(2*n) = 14* n + 10 ≈ 2 * T(n) = 14*n + 20T(n) = 2*n + 99T(2*n) = 4*n + 99 ≈ 2* T(n) = 4*n + 198 (ın special dacan e mare, nu conteaza diferenta dintre T(2*n) si 2 * T(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 83: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm pt care T(n) este functiade mai jos. Cat este T(2*n) pentru fiecare functie(aproximativ)?

T(n) = 10*n2 + 1

T(2*n) = 10*(2*n*2*n) + 1 = 40*n2 + 1 ≈ 4 * T(n) = 40*n2 + 4T(n) = 7*n2 + 10T(2*n) = 7* (2*n*2*n) + 10 = 28*n2 + 10 ≈ 4 * T(n) =28*n2 + 40T(n) = 2*n2 + 99T(2*n) = 2*(2*n*2*n) + 99 = 8*n2 + 99 ≈ 4* T(n) = 8* n2

+ 396 (ın special daca n e mare, nu conteaza diferenta dintreT(2*n) si 2 * T(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 84: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm pt care T(n) este functiade mai jos. Cat este T(2*n) pentru fiecare functie(aproximativ)?

T(n) = 10*n2 + 1T(2*n) = 10*(2*n*2*n) + 1 = 40*n2 + 1 ≈ 4 * T(n) = 40*n2 + 4T(n) = 7*n2 + 10

T(2*n) = 7* (2*n*2*n) + 10 = 28*n2 + 10 ≈ 4 * T(n) =28*n2 + 40T(n) = 2*n2 + 99T(2*n) = 2*(2*n*2*n) + 99 = 8*n2 + 99 ≈ 4* T(n) = 8* n2

+ 396 (ın special daca n e mare, nu conteaza diferenta dintreT(2*n) si 2 * T(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 85: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm pt care T(n) este functiade mai jos. Cat este T(2*n) pentru fiecare functie(aproximativ)?

T(n) = 10*n2 + 1T(2*n) = 10*(2*n*2*n) + 1 = 40*n2 + 1 ≈ 4 * T(n) = 40*n2 + 4T(n) = 7*n2 + 10T(2*n) = 7* (2*n*2*n) + 10 = 28*n2 + 10 ≈ 4 * T(n) =28*n2 + 40T(n) = 2*n2 + 99

T(2*n) = 2*(2*n*2*n) + 99 = 8*n2 + 99 ≈ 4* T(n) = 8* n2

+ 396 (ın special daca n e mare, nu conteaza diferenta dintreT(2*n) si 2 * T(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 86: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm pt care T(n) este functiade mai jos. Cat este T(2*n) pentru fiecare functie(aproximativ)?

T(n) = 10*n2 + 1T(2*n) = 10*(2*n*2*n) + 1 = 40*n2 + 1 ≈ 4 * T(n) = 40*n2 + 4T(n) = 7*n2 + 10T(2*n) = 7* (2*n*2*n) + 10 = 28*n2 + 10 ≈ 4 * T(n) =28*n2 + 40T(n) = 2*n2 + 99T(2*n) = 2*(2*n*2*n) + 99 = 8*n2 + 99 ≈ 4* T(n) = 8* n2

+ 396 (ın special daca n e mare, nu conteaza diferenta dintreT(2*n) si 2 * T(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 87: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Cand vorbim de complexitati, nu ne intereseaza numarul exactde operatii, ci doar termenul de gradul maxim din T (n) (deaceea, ın general nici nu calculam T(n) exact, ci ıncercam sagasim doar termenul de gradul maxim din T(n)) .

Incercam sa cautam o functie care, la valori mari pentru n,aproximeaza valoarea lui T(n). De aceea, acest tip de analizase numeste analiza asimptotica.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 88: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Sa presupunem ca avem un algoritm cu urmatorul numar deoperatii: T (n) = n2 + 3 ∗ n + 20

n n2 T(n) T (n)n2

1 1 24 24

5 25 60 2.4

7 49 90 1.84

10 100 150 1.5

100 10000 10320 1.032

200 40000 40620 1.0155

Cu cat creste valoarea lui n, cu atat devine mai mica diferentadintre valoarea T (n) si valoarea n2. Astfel, pentru valori maripentru n, putem spune ca T (n) ≈ n2

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 89: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp

Exista 3 notatii folosite pentru a descrie complexitatea unuialgoritm: notatia O-mare, notatia Ω-mare si notatia Θ-mare

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 90: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare I

Notatia O-mare desemneaza marginea asimptoticasuperioara a unei functii.

Fie o functie g(n). Multimea de functii O(g(n)) estedefinita ın modul urmator:

O(g(n)) = f (n) : exista constante pozitive

c si n0 astfel incat

0 ≤ f (n) ≤ c ∗ g(n) pentru orice n ≥ n0(1)

Pentru a indica apartenenta unei functii f (n) la multimeaO(g(n)), vom utiliza notatia f (n) = O(g(n)) sauf (n) ∈ O(g(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 91: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare II

Figure: Sursa: Cormen et. al: Introduction to Algorithms, 3rd Edition,MIT Press, 2009

Sa consideram f (n) = n4 + 2n2 + 10n + 500 si g(n) = n5.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 92: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare III

Pe baza definitiei, f (n) = O(g(n)) daca putem gasi constantepozitive c si n0 astfel ıncat 0 ≤ n4 + 2n2 + 10n + 500 ≤ c ∗ n5

pentru orice n ≥ n0

Inegalitatea nu trebuie sa fie adevarata pentru toate valorileposibile ale lui n. Pot exista valori mici, pentru careinegalitatea sa nu fie adevarata, dar trebuie sa aratam caexista o limita, n0, si inegalitatea este adevarata pentru oricepunct mai mare ca n0.

Exista mai multe alegeri bune pentru c si n0. Sa alegem c = 2

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 93: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare IV

n f (n) 2 * g(n)1 513 23 629 4864 828 20485 1225 62507 3069 33614

Pe baza valorilor din tabel, putem conclude ca pentru oricen0 ≥ 4, vom avea 0 ≤ n4 + 2n2 + 10n + 500 ≤ 2n5

Obs. Daca alegeam o valoare mai mare pentru c , atunciprobabil inegalitatea era adevarata de la o valoare mai micapentru n0, dar acest lucru nu conteaza: trebuie sa gasim unsingur c pentru care trebuie sa existe un n0, nu conteaza catde mare/mic este.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 94: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare V

Deci pentru functia f (n) = n4 + 2n2 + 10n + 500 avemf (n) = O(n5).

Sa consideram g(n) = n4. Este f (n) = O(n4)?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 95: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare VI

Pentru a demonstra ca f (n) = O(n4) trebuie sa cautamconstante pozitive c si n0, astfel ıncat0 ≤ n4 + 2n2 + 10n + 500 ≤ c ∗ n4 pentru orice n ≥ n0

Sa alegem c = 3. In acest caz avem urmatoarele valori:

n f (n) 3 ∗ n4

1 513 3

3 629 243

4 828 768

5 1225 1875

7 3069 7203

Pe baza valorilor din tabel, putem conclude ca pentru oricen0 ≥ 5, vom avea 0 ≤ n4 + 2n2 + 10n + 500 ≤ 3n4

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 96: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare VII

Sa consideram g(n) = n3. Este f (n) = O(n3)?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 97: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare VIII

Pentru a demonstra ca f (n) = O(n3) trebuie sa cautamconstante pozitive c si n0, astfel ıncat0 ≤ n4 + 2n2 + 10n + 500 ≤ c ∗ n3, pentru orice n ≥ n0.

Aceata inegalitate nu mai poate fi demonstrata. Indiferent catde mare ar fi valoarea lui c, va exista un punct p, cand f (p)devine mai mare decat c ∗ p3.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 98: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare IX

Sa consideram f (n) = 3n3 + 20n2 + 10n + 500 si g(n) = n3.Este f (n) = O(g(n))?

Pe baza definitiei, f (n) = O(g(n)) daca putem gasi constantepozitive c si n0 astfel ıncat0 ≤ 3 ∗ n3 + 20n2 + 10n + 500 ≤ c ∗ n3 pentru orice n ≥ n0

E clar ca pentru valori de c ≤ 3 inegalitatea nu esteadevarata. Sa luam c = 4.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 99: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare X

n 3 ∗ n3 + 20n2 + 10 ∗ n + 500 4 ∗ n3

1 533 4

5 1425 500

10 5600 4000

15 15275 13500

20 32700 32000

25 60125 62500

Pe baza valorilor din tabel, putem conclude ca pentru oricen0 ≥ 25, vom avea 0 ≤ 3 ∗ n3 + 20 ∗ n2 + 10n + 500 ≤ 4n3

Deci pentru functia f (n) = 3 ∗ n3 + 20 ∗ n2 + 10n + 500 avemf (n) = O(n3).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 100: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare XI

Am vazut ca pentru f (n) = n4 + 2 ∗ n2 + 10n + 500:

f (n) = O(n5),

f (n) = O(n4)

f (n) 6= O(n3).

Puteti spune alte functii g(n) pentru care f (n) = O(g(n)) ?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 101: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare XII

Functia suma1 avea T (n) = 5 ∗ n + 6

Gasiti o functie g(n) pentru care T (n) = O(g(n)).

Puteti gasi mai multe valori pentru g(n)?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 102: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare XIII

Pentru orice functie g(n) mai mare sau egal cu n (de ex. n,n2, n3, 2n, etc.) avem T (n) = O(g(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 103: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare XIV

Functia suma2 avea T (n) = 6

Gasiti o functie g(n) pentru care T (n) = O(g(n))

Puteti gasi mai multe valori pentru g(n)?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 104: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare XV

Pentru orice functie g(n) mai mare sau egal cu 1 (de ex. 1, n,n2, n3, 2n, etc.) avem T (n) = O(g(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 105: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O −mare XVI

Am vazut ca pentru o functie f (n) pot exista mai multefunctii g(n), astfel ıncat f (n) = O(g(n)). In general, dacafolosim notatia O-mare, ıncercam sa gasim cea mai micavaloarea posibila pentru g(n).

Deci, vom spune ca T (n) = 5 ∗ n + 6 apartine lui O(n) siT (n) = 6 apartine lui O(1).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 106: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia O-mare - concluzii

Sa presupunem ca T (n) este numarul de operatii elementarepentru un algoritm

Sa presupunem ca t(n) este termenul de gradul maxim dinT (n), fara orice constanta

T (n) apartine lui O(g(n)), daca g(n) ≥ t(n)

Exemple:

7n3 + 10 ∈ O(n3)n2

2 + 4n + 1 ∈ O(n2)n ∗ log2n + 4n ∈ O(n ∗ log2n)n ∗ log2n + 4n ∈ O(n2)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 107: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Ω−mare I

Notatia Ω-mare desemneaza marginea asimptoticainferioara a unei functii.

Fie o functie g(n). Multimea de functii Ω(g(n)) estedefinita ın modul urmator:

Ω(g(n)) = f (n) : exista constante pozitive

c si n0 astfel incat

0 ≤ c ∗ g(n) ≤ f (n) pentru orice n ≥ n0(2)

Pentru a indica apartenenta unei functii f (n) la multimeaΩ(g(n)), vom utiliza notatia f (n) = Ω(g(n)) sauf (n) ∈ Ω(g(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 108: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Ω−mare II

Figure: Sursa: Cormen et. al: Introduction to Algorithms, 3rd Edition,MIT Press, 2009

Sa consideram f (n) = n4 + 2n2 + 10n + 500

Gasiti valori pentru functia g(n), astfel ıncat f (n) = Ω(g(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 109: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Ω−mare III

Pentru orice functie g(n) mai mica sau egala cu n4 (1, n, n2,n3 si n4, etc.) avem f (n) = Ω(g(n))

Si ın cazul T (n) = 5 ∗ n + 6?

Si la T (n) = 6?

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 110: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Ω−mare IV

Am vazut ca pentru o functie f (n) pot exista mai multefunctii g(n), astfel ıncat f (n) = Ω(g(n)). In general, dacafolosim notatia Ω-mare, ıncercam sa gasim cea mai marevaloarea posibila pentru g(n).

Deci, vom spune ca T (n) = 5 ∗ n + 6 apartine lui Ω(n) siT (n) = 6 apartine lui Ω(1).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 111: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Θ-mare I

Fie o functie g(n). Multimea de functii Θ(g(n)) estedefinita ın modul urmator:

Θ(g(n)) = f (n) : exista constante pozitive

c1, c2 si n0 astfel incat

c1 ∗ g(n) ≤ f (n) ≤ c2 ∗ g(n) pentru orice n ≥ n0(3)

Pentru a indica apartenenta unei functii f (n) la multimeaΘ(g(n)), vom utiliza notatia f (n) = Θ(g(n)) sauf (n) ∈ Θ(g(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 112: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Θ-mare II

Figure: Sursa: Cormen et. al: Introduction to Algorithms, 3rdEdition, MIT Press, 2009

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 113: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Θ-mare III

Sa consideram functai suma1, care avea T (n) = 5 ∗ n + 6.Gasiti o valoare pentru functia g(n), astfel ıncatf (n) = Θ(g(n))

Sa consideram functai suma2, care avea T (n) = 6. Gasiti ovaloare pentru functia g(n), astfel ıncat f (n) = Θ(g(n))

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 114: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Θ-mare IV

Pentru functia suma1 avem T (n) = Θ(n)

Pentru functia suma2 avem T (n) = Θ(1)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 115: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Notatia Θ-mare V

O(g(n)) este limita superioara pentru functia f (n), Ω(g(n))este limita inferioara, Θ(g(n)) este valoarea exacta.

Am vazut ca pentru o functie f (n), pot exista mai multefunctii g(n), astfel ıncat f (n) = O(g(n)) sau f (n) = Ω(g(n)),dar exista o singura functie pentru care f (n) = Θ(n)

Cand acest lucru este posibil, vom folosi notatia Θ pentrucomplexitatea unui algoritm. Daca nu putem folosi notatia Θ,vom folosi notatia O, si ıncercam sa gasim cea mai micavaloare la notatia O.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 116: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitati uzuale

Cateva complexitati des ıntalnite ın practica

T (n) = Θ(1) - complexitate constantaT (n) = Θ(log2n) - complexitate logaritmicaT (n) = Θ(n) - complexitate liniaraT (n) = Θ(n2) - complexitate patraticaT (n) = Θ(nk) - complexitate polinomialaT (n) = Θ(2n) - complexitate exponentiala

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 117: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ghid pentru a calcula complexitatea unui algoritm I

Cicluri - Numarul de operatii pentru un ciclu: numarul deoperatii din interiorul ciclului, ınmultit cu numarul de repetitiipentru ciclu.

m = 0n = 1for i = 0, i < n, 1 execute

m = m + 2n = n + 2 * m

end for

Practic, numarul de operatii pentru orice ciclu (undeincrementarea se face cu 1) poate fi scris ca o suma:

2 +n−1∑i=0

5 = 2 + 5 ∗ n

Deci T (n) = 2 + 5 ∗ n = Θ(n)Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 118: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ghid pentru a calcula complexitatea unui algoritm II

Cicluri imbricate - Se analizeaza de la ciclul din exterior spreciclul din interior. Numarul de operatii este produsulnumerelor de operatii din cicluri.

k = 1for i = 0, i < n, 1 execute

for j = 0, i ¡ n, 1, executek = k + i + j

end forend for

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 119: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ghid pentru a calcula complexitatea unui algoritm III

1 +n−1∑i=0

n−1∑j=0

1 = 1 +n−1∑i=0

n = 1 + n2

Deci T (n) = n2 + 1 = Θ(n2)

Nu trebuie sa consideram separat ca avem 3 instructiuni ınciclul pentru cu j (2 adunari si o atribuire), daca e vorba deun numar constant de operatii, putem scrie doar 1.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 120: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ghid pentru a calcula complexitatea unui algoritm IV

Instructiuni consecutive - Se aduna numarul de operatiipentru fiecare instructiune

x = 0for i = 0, i < n, 1 execute

x = x + 1end form = xfor i = 0, i < n, 1 execute

for j = 1, j < i, 1 executem = m + j - i

end forend for

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 121: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ghid pentru a calcula complexitatea unui algoritm V

1 +n−1∑i=0

1 + 1 +n−1∑i=0

i−1∑j=0

1 = 2 + n +n−1∑i=0

i = 2 + n +n ∗ (n − 1)

2

T (n) =n2

2+

n

2+ 2 = Θ(n2)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 122: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ghid pentru a calcula complexitatea unui algoritm VI

Instructiunea daca - Se aduna numarul de operatii pentruconditie si maximul dintre numarul de operatii dintre ramuradaca si altfel

rez = 0if x ≤ 0 then

rez = x * (-1)else

for i = 1, i < x+1, 1 executerez = rez + x

end forend if

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 123: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Ghid pentru a calcula complexitatea unui algoritm VII

1 + 1 + max(1,x∑

i=1

1) = 2 + max(1, x) = 2 + x

T (x) = x + 2 = Θ(x)

In general complexitatile sunt sub forma Θ(n), sau O(n), dardaca avem un algoritm unde datele de intrare nu sunt notatecu n, putem folosi alta valoare, de ex: Θ(x)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 124: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Caz favorabil, defavorabil, mediu I

Am vazut ca numarul de operatii efectuate de un algoritm(T (n)) de multe ori depinde de marimea datelelor de intrare(notata de obicei cu valoarea n).

De exemplu, daca am o functie care calculeaza sumaelementelor dintr-un tablou, numarul de operatii depinde delungimea tabloului (numarul de elemente din tablou).

Cateodata numarul de operatii nu depinde doar de marimeadatelor de intrare, ci si de datele exacte.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 125: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Caz favorabil, defavorabil, mediu II

Sa consideram functia urmatoare, care cauta pozitia unuinumar dat ıntr-un tablou si returneaza -1 daca tabloul nucontine elementul respectiv.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 126: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Caz favorabil, defavorabil, mediu III

function PozitieElement(tablou: integer[], n: integer, elem: integer) is://n este numarul de elemente din tablou

rezultat, index: integergasit: booleanrezultat = -1gasit = falseindex = 0while gasit = fals AND index < n execute

if tablou[index] == elem thenrezultat = indexgasit = true

end ifindex = index + 1

end whilereturn rezultat

end function

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 127: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Caz favorbil, defavorabil, mediu IV

Sa presupunem ca tabloul transmis ca parametru are lungimean = 5 si cautam elementul 13. Cate operatii vor fi efectuatede algoritm?

Trebuie sa determinam de cate ori se executa ciclul cattimp.

Daca tablou[0] este 13 (de exemplu ın tabloul [13, 1, 5, 3, 6]),ciclul cattimp se executa o singura data si avem aproximativ 6+ 6 + 1 = 13 operatiiDaca tablou[0] nu e 13 si tablou[1] este 13 (de exemplu ıntabloul [5, 13, 9, 10, 12]) ciclul cattimp se executa de 2 ori siavem aproximativ 6 + 11 + 1 = 18 operatiiDaca tablou[0] si tablou[1] nu e 13 si tablou[2] este 13 (deexemplu ın tabloul [3, 7, 13, 1, 2]), ciclul cattimp se executade 3 ori si avem aproximativ 6 + 15 + 1 = 22 operatiietc...

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 128: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Caz favorabil, defavorabil, mediu V

In cazul functiei PozitieElement, complexitatea algoritmuluinu depinde doar de lungimea tabloului, ci si de elementeexacte din tablou. In aceste situatii putem vorbi despre:

Complexitate ın caz favorabil - cel mai mic numar de operatiiComplexitate ın caz defavorabil - cel mai mare numar deoperatiiComplexitate ın caz mediu - numarul mediu de operatii

Cazul favorabil, defavorabil si mediu se refera la un nfixat! Nu spunem ca avem caz favorabil cand tabloul e scurtsi caz defavorabil cand e lung.

Nu orice algoritm are caz favorabil, defavorbil si mediuseparat, sunt algoritmi care tot timpul executa acelasi numarde operatii pentru un n fixat.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 129: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cazul favorabil

Cazul favorabil este cea mai buna situatie posibila, reprezintadatele de intrare pentru care algoritmul va executa un numarcat mai mic (minimul posibil) de operatii.

In cazul functiei PozitieElement cazul favorabil este candprimul element din tablou este cel cautat. In acest cazalgoritmul va executa aproximativ 13 operatii (6 operatii deinitializare, conditia din cattimp si din daca, 2 atribuiri ındaca, incrementarea indexului, conditia din cattimp siatribuirea finala).

Numarul de operatii ın acest caz favorabil nu depinde delungimea tabloului (adica ın caz favorabil avem 13 operatiiindiferent de numarul de elemente din tablou), decicomplexitatea ın caz favorabil este Θ(1)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 130: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cazul favorabil

Cazul favorabil este cea mai buna situatie posibila, reprezintadatele de intrare pentru care algoritmul va executa un numarcat mai mic (minimul posibil) de operatii.

In cazul functiei PozitieElement cazul favorabil este candprimul element din tablou este cel cautat. In acest cazalgoritmul va executa aproximativ 13 operatii (6 operatii deinitializare, conditia din cattimp si din daca, 2 atribuiri ındaca, incrementarea indexului, conditia din cattimp siatribuirea finala).

Numarul de operatii ın acest caz favorabil nu depinde delungimea tabloului (adica ın caz favorabil avem 13 operatiiindiferent de numarul de elemente din tablou), decicomplexitatea ın caz favorabil este Θ(1)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 131: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cazul defavorabil

Cazul defavorabil este situatia cea mai defavorabila, datele deintrare pentru care algoritmul va executa numarul maxim deoperatii posibile.

In cazul functiei PozitieElement cazul defavorabil este candtabloul nu contine elementul cautat. In acest caz va trebui saparcurgem si sa verificam toate elementele din tablou. E ca sicum nu ar exista variabila gasit si am avea un ciclu pentru.

In cazul defavorabil parcurgem toate elementele, decicomplexitatea este proportionala cu lungimea tabloului, deciΘ(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 132: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cazul defavorabil

Cazul defavorabil este situatia cea mai defavorabila, datele deintrare pentru care algoritmul va executa numarul maxim deoperatii posibile.

In cazul functiei PozitieElement cazul defavorabil este candtabloul nu contine elementul cautat. In acest caz va trebui saparcurgem si sa verificam toate elementele din tablou. E ca sicum nu ar exista variabila gasit si am avea un ciclu pentru.

In cazul defavorabil parcurgem toate elementele, decicomplexitatea este proportionala cu lungimea tabloului, deciΘ(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 133: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cazul mediu I

La cazult mediu, teoretic, ar trebuie sa luam toate cazurileposibile, sa numaram pentru fiecare caz cate operatii suntefectuate, si sa facem media. Dar acest lucru e imposibil ıngeneral.

Cazul mediu se calculeaza cu o formula:∑I∈D

P(I ) ∗ E (I )

D reprezinta domeniul problemei, adica toate datele de intrareposibile (pentru PozitieElement asta ınseamna toate tablourilede numere ıntregi cu n elemente).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 134: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cazul mediu II

I reprezinta un caz posibil pentru date de intrare (pentruPozitieElement cand vorbim de I nu ne gandim la un tablouconcret, ci la situatii posibile: tablou unde primul element estecel cautat, tablou unde al 2-lea element este cel cautat, ...,tablou unde ultimul element este cel cautat, tablou care nucontine elementul cautat)

P(I ) reprezinta probabilitatea sa avem ca data de intrare pe I .De cele mai multe ori probabilitatile sunt considerate egale,adica e la fel de probabil sa am tablou unde primul element ecel cautat ca situatia ın care elementul cautat e pe pozitia 2,etc.

E (I ) este numarul de operatii care vor fi efectuate pentrudatele de intrare I .

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 135: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cazul mediu III

Si acum sa vedem concret pentru functia PozitieElement:

Fixam lungimea tabloului la n.Pentru I exista urmatoarele posibilitati: tablou unde primulnumar e cel cautat, tablou unde al 2-lea numar este cel cautat,..., tablou unde ultimul element este cel cautat, tablou unde nuexista numarul cautat.Sunt ın total n + 1 situatii posibile, deci probabilitatea P(I )este 1

n+1 .Pentru a calcula valoarea E (I ) putem considera doar numarulde cate ori este executat ciclul cattimp, pentru fiecare I (ın locsa ıncercam sa calculam numarul exact de operatii).∑I∈D

P(I )∗E (I ) =1

n + 1∗1+

1

n + 1∗2+....+

1

n + 1∗n+

1

n + 1∗n =

1

n + 1∗(1+2+3+...+n+n) =

1

n + 1∗n ∗ (n + 1)

2+

n

n + 1= Θ(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 136: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Cazul mediu IV

Am calculat ca avem:

Caz favorabil Θ(1)Caz defavorabil Θ(n)Caz mediu Θ(n)

Complexitatea totala este maximul dintre aceste valori, adican. Dar pentru a arata ca exista situatii cand complexitateaeste mai mica, vom folosi notatia O −mare. Daca toate cele3 valori erau la fel, atunci complexitatea totala era exprimatacu Θ.

Deci, complexitatea totala pentru functia PozitiePar esteO(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 137: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de timp - Concluzii

Complexitatea unui algoritm depinde de marimea datelor deintrare.

Cateodata complexitatea depinde nu doar de marimea datelorde intrare ci si de valoarea lor exacta. In aceste situatii vorbimde caz favorabil, defavorabil si mediu.

Notatia Ω−mare nu prea este folosita ın practica

In general, preferam sa folosim notatia Θ−mare

Folosim notatia O −mare ın 2 situatii:

Nu pot exprima complexitatea cu Θ (nu pot calcula valoareaexacta), dar pot sa dau o limita superioaraAm caz favorabil, defavorabil si mediu, si aceste 3 cazuri aucomplexitati diferite

Daca folosim notatia O −mare, ıncercam sa estimam cat maiprecis valoarea complexitatii

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 138: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Formule utile

n∑i=0

1 = 1 + 1 + 1 + ... + 1 = n + 1

n∑i=0

i = 0 + 1 + 2 + 3 + ... + n =n ∗ (n + 1)

2

n∑i=0

i2 = 02 + 12 + 22 + 32 + ... + n2 =n ∗ (n + 1) ∗ (2n + 1)

6

n∑i=0

i3 = 03 + 13 + 23 + 33 + ... + n3 =n2 ∗ (n + 1)2

4

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 139: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Formule utile

n∑i=0

i4 = 04 + 14 + ... + n4 =n ∗ (n + 1) ∗ (2n + 1) ∗ (3n2 + 3n − 1)

30

n∑i=0

pi = 1 + p1 + p2 + ... + pn =pn+1 − 1

p − 1

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 140: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de spatiu I

Complexitatea de spatiu masoara spatiul de memorie de careare nevoie un algoritm pentru a stoca variabilele folosite peparcursul algoritmului. In general vorbim de complexitate despatiu extra, adica nu calculam spatiul ocupat de parametri,doar ceea ce trebuie ın plus.

Se folosesc aceleasi notatii ca ın cazul complexitatii de timp

De exemplu, complexitatea de spatiu pentru algoritmulPozitieElement este Θ(1) - tot timpul avem de retinul doar 3variabile (rezultat, gasit si index) indiferent de marimeatabloului.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 141: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Complexitatea de spatiu II

De multe ori exista un compromis ıntre complexitatea de timpsi spatiu: un algoritm cu o complexitate de timp mai buna,s-ar putea sa aiba complexitate de spatiu mai mare, decat unalt algoritm care are o complexitate de timp mai slaba.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 142: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static int sum(int n) int sum = 0;for (int i = 0; i < n; i++)

for (int j = 0; j < i ∗ i ; j++) sum = sum + 1;

return sum;

Obs: Nu trebuie sa ıntelegem ce face subalgoritmul pentru acalcula complexitatea.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 143: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Putem rescrie (aproape) orice ciclu for ca o suma:

n−1∑i=0

j<i2∑j=0

1 =n−1∑i=0

i2 =(n − 1) ∗ n ∗ (2n − 1)

6∈ Θ(n3)

Obs 1: Nu trebuie sa calculam expresia exacta, cand vedemcat va fi termenul de gradul maxim, ne putem opri cu calcule.

Obs 2: Doua cicluri for unul ın altul, nu ınseamna automatcomplexitate n2.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 144: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Putem rescrie (aproape) orice ciclu for ca o suma:

n−1∑i=0

j<i2∑j=0

1 =n−1∑i=0

i2 =(n − 1) ∗ n ∗ (2n − 1)

6∈ Θ(n3)

Obs 1: Nu trebuie sa calculam expresia exacta, cand vedemcat va fi termenul de gradul maxim, ne putem opri cu calcule.

Obs 2: Doua cicluri for unul ın altul, nu ınseamna automatcomplexitate n2.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 145: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static int sum(int n)int sum = 0;for (int i = 0; i < n; i++)

for (int j = 0; j < i ; j++) sum = sum + 1;

return sum;

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 146: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Daca ın ciclul for, variabila se incrementeaza cu 1, putemfolosi suma:

n−1∑i=0

i−1∑j=0

1 =n−1∑i=0

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

i −n−1∑i=0

1 =

=(n − 1) ∗ n

2− (n − 1) ∈ Θ(n2)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 147: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static int mistery(int n) int r = 0;

for (int i = 1; i <= n; i++) for (int j = i+1; j <= n; j++)

for (int k = i + j − 1; k <= n; k++) r = r + 1;

return r;

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 148: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

n∑i=1

n∑j=i+1

n∑k=i+j−1

1 =n∑

i=1

n∑j=i+1

(n − (i + j − 1) + 1) =

=n∑

i=1

n∑j=i+1

(n − i − j + 2) =

=n∑

i=1

n∑j=i+1

n −n∑

i=1

n∑j=i+1

i −n∑

i=1

n∑j=i+1

j +n∑

i=1

n∑j=i+1

2 =

Continuam separat cu cei 4 termeni, si la final, cand avem oexperisie pentru fiecare, revenim la expresia de aici

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 149: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple - Primul termen

n∑i=1

n∑j=i+1

n =n∑

i=1

(n − (i + 1) + 1) ∗ n =

=n∑

i=1

(n − i)n =n∑

i=1

(n2 − i ∗ n) =n∑

i=1

n2 −n∑

i=1

i ∗ n =

= n2 ∗ n − n ∗n∑

i=1

i = n3 − n ∗ n ∗ (n + 1)

2

=2 ∗ n3

2− n3 + n2

2=

n3 − n2

2

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 150: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple - Al 2-lea termen

n∑i=1

n∑j=i+1

i =n∑

i=1

(n − (i + 1) + 1) ∗ i =

=n∑

i=1

(n − i) ∗ i =n∑

i=1

n ∗ i −n∑

i=1

i2 =

= n∗n∑

i=1

i−n ∗ (n + 1) ∗ (2n + 1)

6= n∗n ∗ (n + 1)

2−(n2 + n) ∗ (2n + 1)

6=

=3n3 + 3n2

6− 2n3 + n2 + 2n2 + n

6=

n3 − n

6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 151: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple - Al 3-lea termen

n∑i=1

n∑j=i+1

j =n∑

i=1

n ∗ (n + 1)

2− i ∗ (i + 1)

2=

n∑i=1

n2 + n − i2 − i

2=

1

2∗ (

n∑i=1

n2 +n∑

i=1

n −n∑

i=1

i2 −n∑

i=1

i) =

1

2∗ (n ∗ n2 + n ∗ n − n ∗ (n + 1) ∗ (2n + 1)

6− n ∗ (n + 1)

2) =

=1

2∗ (n3 + n2 − 2n3 + 3n2 + n

6− n2 + n

2) =

=1

2∗(6n3 + 6n2 − 2n3 − 3n2 − n − 3n2 − 3n

6) =

4n3 − 4n

12=

n3 − n

3

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 152: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple - Al 4-lea termen

n∑i=1

n∑j=i+1

2 =n∑

i=1

(n − (i + 1) + 1) ∗ 2 =n∑

i=1

2 ∗ (n − i) =

=n∑

i=1

2n −n∑

i=1

2 ∗ i = 2 ∗n∑

i=1

n − 2 ∗n∑

i=1

i =

= 2n2 − 2 ∗ n ∗ (n + 1)

2= 2n2 − n2 − n = n2 − n

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 153: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple - Inapoi la expresia anterioara

n3 − n2

2− n3 − n

6− n3 − n

3+ n2 − n =

=3n3 − 3n2 − n3 + n − 2n3 + 2n + 6n2 − 6n

6=

3n2 − 3n

6∈ Θ(n2)

Obs: In acest exemplu, termenul de gradul 3 (n3) dispare dinrezultat, deci doar faptul ca pe prima linie avem n3 nuınseamna automat ca vom avea complexitate Θ(n3).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 154: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static void function(int n) for (int i = 1; i <= n/3; i++)

for (int j = 1; j <= n; j = j + 4) System.out.println(“*”);

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 155: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

In al doilea ciclu for, j nu se incrementeaza cu 1, deci nuputem scrie acel ciclu for sub forma unei sume.

In primul ciclu for, i merge de la 1, pana la n3 , si la fiecare pas

i creste cu 1. In total, ciclul se repeta de n3 ori.

In al doilea ciclu for, j merge de la 1, pana la n, si la fiecarepas creste cu 4. Valorile lui j vor fi:

1, 5, 9, 13, 17, 21, etc.

Daca j creste cu 1, ciclul se repeta de n ori. Daca j creste cu4, ciclul se repeta de n

4 ori.

Cele 2 cicluri fiind imbricate, ınmultim valorile. T (n) ∈ Θ(n2)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 156: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static void s1(n)for (int i = 1; i <= n; i++)

int j = n;while (j > 0)

j = j/2;System.out.println(“*”);

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 157: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Cand vedem ciclu while, trebuie sa verificam daca avem osituatie cand avem caz favorabil, defavorabil, mediu.

Aici nu avem caz favorabil, defavorabil si mediu, dar nici nuputem rescrie while ca o suma (La fiecare iteratie j se ımpartela 2, nu putem scrie acest lucru ca o suma).

Ciclul for se repeta de n ori.

Valoarea lui j tot timpul porneste de la n, si la fiecare iteratiese ınjumatateste.

Daca j e initial 100, vom avea: 100, 50, 25, 12, 6, 3, 1, 0Daca j e initial 500, vom avea: 500, 250, 125, 62, 31, 15, 7, 3,1, 0

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 158: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Numarul de iteratii pentru ciclul while este log2n (logbX ,arata de cate ori pot ımpartii ın mod repetat numarul X la bpana ajung la 0).

Complexitatea este: T (n) ∈ Θ(n ∗ log2n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 159: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static long factorial(int n) if (n <= 1)

return 1; else

return n * factorial (n-1);

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 160: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

factorial este functie recursiva (adica pentru a calculafactorial(n), trebuie sa calculam factorial(n-1).

La functii recursive, calculam altfel complexitatea decat lafunctii nerecursive.

Pornim de la relatia de recurenta (adica scriem valoarea luiT (n) ın functie de valoarea lui T (n − 1).

T (n) =

1 daca n <= 1

T(n-1) + 1 altfel

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 161: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Deocamdata ne ocupam de ramura recursiva

T (n) = T (n − 1) + 1

T (n − 1) = T (n − 2) + 1

T (n − 2) = T (n − 3) + 1

...

T (2) = T (1) + 1

Acum adunam toate aceste ecuatii. O mare parte dintretermeni (T (n − 1), T (n − 2), ... T (2)) apar si ın parteastanga si ın partea dreapta, deci se simplifica.

T (n) = T (1) + 1 + 1 + 1... + 1

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 162: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

T (1) este 1 (prima ramura din relatia recursiva)

Cate +1 avem?

Avem cate un +1 pentru fiecare ecuatie. Si avem ın totaln − 1 ecuatii.

T (n) = 1 + 1 + 1 + ... + 1 = n

Deci T (n) ∈ Θ(n)

Obs: La functii nerecursive, nu are importanta daca avem un+1 sau nu (pentru ca oricum avem ın general termeni maimari). La functii recursive trebuie sa avem acest termen, altfelnu vom avea rezultatul corect.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 163: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static void recursiveFun4(int n, int m, int o) if (n<=0)

System.out.println(m + o); else

recursiveFun4(n-1, m+1, o);recursiveFun4(n-1, m, o+1);

Incepem din nou cu formula de recurenta

T (n) =

1 daca n <= 0

2*T(n-1) + 1 altfel

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 164: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static void recursiveFun4(int n, int m, int o) if (n<=0)

System.out.println(m + o); else

recursiveFun4(n-1, m+1, o);recursiveFun4(n-1, m, o+1);

Incepem din nou cu formula de recurenta

T (n) =

1 daca n <= 0

2*T(n-1) + 1 altfel

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 165: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

T (n) = 2 ∗ T (n − 1) + 1

Vrem din nou ca la final sa adunam ecuatiile, si vrem sadispara majoritatea termenelor. Pentru asta ne trebuie caacum sa scriem cat e 2 ∗ T (n − 1)

2 ∗ T (n − 1) = 22 ∗ T (n − 2) + 2

22 ∗ T (n − 2) = 23 ∗ T (n − 3) + 22

23 ∗ T (n − 3) = 24 ∗ T (n − 4) + 23

...

2n−2 ∗ T (2) = 2n−1 ∗ T (1) + 2n−2

2n−1 ∗ T (1) = 2n ∗ T (0) + 2n−1

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 166: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Adunam ecuatiile:

T (n) = 2n ∗ T (0) + 1 + 2 + 22 + 23 + ... + 2n−1

T (n) = 1 + 2 + 22 + 23 + ... + 2n−1 + 2n

T (n) =2n+1 − 1

2− 1∈ Θ(2n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 167: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static int recursiveFun5(int n) for (i = 0; i < n; i += 2)

// do somethingif (n <= 0)

return 1; else

return 1 + recursiveFun5(n/5);

T (n) =

1 daca n <= 0

T(n/5) + n altfel

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 168: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

public static int recursiveFun5(int n) for (i = 0; i < n; i += 2)

// do somethingif (n <= 0)

return 1; else

return 1 + recursiveFun5(n/5);

T (n) =

1 daca n <= 0

T(n/5) + n altfel

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 169: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Cand apelul recursiv se face pentru n ımpartit la un numar c ,ınainte de a ıncepe calculele, notam valoarea lui n ca fiind ck .

In cazul nostru, presupunem ca n = 5k

T (5k) = T (5k−1) + 5k

T (5k−1) = T (5k−2) + 5k−1

T (5k−2) = T (5k−3) + 5k−2

...

T (52) = T (51) + 52

T (51) = T (50) + 5

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 170: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs03.pdf · 2019-12-15 · Ce operat˘ii credet˘i c a nu mai exist a pentru o Colect˘ie ordonat a? Ce operat˘ii credet˘i

Exemple

Adunam ecuatiile

T (5k) = T (1) + 5 + 52 + ... + 5k−2 + 5k−1 + 5k

T (5k) = 1 + 5 + ... + 5k−1 + 5k =5k+1 − 1

5− 1

5k ∗ 5− 1

4=

5n − 1

4∈ Θ(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE