146
PROGRAMARE S ¸I STRUCTURI DE DATE CURS 4 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

PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

  • Upload
    others

  • View
    8

  • Download
    1

Embed Size (px)

Citation preview

Page 1: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

PROGRAMARE SI STRUCTURI DE DATECURS 4

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/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Cuprins

Vector dinamic

Ansamblu binar

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

Page 3: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array

Array-ul (vectorul) este o structura folosita foarte des candavem de stocat mai multe elemente de acelasi tip.

De exemplu:

elemente: Integer[10]

Sa vedem care sunt avantajele si dezavantajele array-ului.

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

Page 4: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Avantaje

Care credeti ca este principalul avantaj al unui array?

Cand se defineste un array, trebuie sa spunem ce tip vor aveaelementele arrayului si cate elemente vrem sa aiba arrayul.

Pe baza acestor informatii se rezerva spatiu de memorarepentru array. De exemplu, daca limbajul de programarefoloseste 4 bytes pentru a stoca un numar ıntreg, si noidefinim un array de numere ıntregi de 10 elemente, atunci4 ∗ 10 = 40 de bytes consecutivi vor fi rezervati pentru arrayulnostru.

Valoarea arrayului (adica ceea ce este retinut intern) este defapt adresa de memorie unde ıncepe arrayul.

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

Page 5: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Avantaje

Care credeti ca este principalul avantaj al unui array?

Cand se defineste un array, trebuie sa spunem ce tip vor aveaelementele arrayului si cate elemente vrem sa aiba arrayul.

Pe baza acestor informatii se rezerva spatiu de memorarepentru array. De exemplu, daca limbajul de programarefoloseste 4 bytes pentru a stoca un numar ıntreg, si noidefinim un array de numere ıntregi de 10 elemente, atunci4 ∗ 10 = 40 de bytes consecutivi vor fi rezervati pentru arrayulnostru.

Valoarea arrayului (adica ceea ce este retinut intern) este defapt adresa de memorie unde ıncepe arrayul.

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

Page 6: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Avantaje

Avand aceste date (zona de memorie unde ıncepe array-ul sidimensiunea unui element), adresa de memorie pentru fiecareelement din array poate fi calculata foarte usor.

La ce adresa se gaseste elementul de pe pozitia 5?

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

Page 7: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Avantaje

Avand aceste date (zona de memorie unde ıncepe array-ul sidimensiunea unui element), adresa de memorie pentru fiecareelement din array poate fi calculata foarte usor.

La ce adresa se gaseste elementul de pe pozitia 5?

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

Page 8: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Avantaje

La ce adresa se gaseste elementul de pe pozitia 5?

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

Page 9: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Avantaje

La ce adresa se gaseste elementul de pe pozitia 5?

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

Page 10: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Avantaje

Practic, cand noi scriem vector[i], acest lucru se transforma ınceva de genul:acceseaza elementul care se afla pe pozitiaadresa vector + i * marimea unui element

A calcula adresa unui element (folosind formula de mai sus)necesita timp constant (o singura operatie), a accesa ce seafla la o anumita adresa (acest lucru se ıntampla implicit candfolosim o variabila) tot timp constant necesita.

Avantajul principal al unui array este faptul ca oricare elementpoate fi accesat ın timp constant (Θ(1)).

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

Page 11: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Dezavantaje

Care credeti ca este dezavantajul principal al unui array?

Cand vrem sa definim un array trebuie sa specificam neaparatcate elemente va avea array-ul. Odata ce am definit un arrayde n elemente, ulterior nu ne putem razgandi, ca de fapt vrem2 ∗ n. Daca nu stim exact cate elemente va avea array-ul,trebuie sa gasim o limita superioara, pentru ca odata definit,array-ul nu poate fi facut mai mare.

Pe de alta parte, nici sa ocup mult spatiu degeaba, pe motivca sa fim siguri ca e suficient de mare nu e ın regula.

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

Page 12: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Dezavantaje

Care credeti ca este dezavantajul principal al unui array?

Cand vrem sa definim un array trebuie sa specificam neaparatcate elemente va avea array-ul. Odata ce am definit un arrayde n elemente, ulterior nu ne putem razgandi, ca de fapt vrem2 ∗ n. Daca nu stim exact cate elemente va avea array-ul,trebuie sa gasim o limita superioara, pentru ca odata definit,array-ul nu poate fi facut mai mare.

Pe de alta parte, nici sa ocup mult spatiu degeaba, pe motivca sa fim siguri ca e suficient de mare nu e ın regula.

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

Page 13: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Dezavantaje

Care credeti ca este dezavantajul principal al unui array?

Cand vrem sa definim un array trebuie sa specificam neaparatcate elemente va avea array-ul. Odata ce am definit un arrayde n elemente, ulterior nu ne putem razgandi, ca de fapt vrem2 ∗ n. Daca nu stim exact cate elemente va avea array-ul,trebuie sa gasim o limita superioara, pentru ca odata definit,array-ul nu poate fi facut mai mare.

Pe de alta parte, nici sa ocup mult spatiu degeaba, pe motivca sa fim siguri ca e suficient de mare nu e ın regula.

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

Page 14: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Array-ul - Dezavantaje

Cand avem nevoie de un array, trebuie sa stabilim numarul deelemente (dimensiunea array-ului) cautand un echilibru ıntre aavea suficient spatiu sa memoram toate elementele de careavem nevoie, dar sa nici nu ocupam prea mult spatiu degeaba.Acest aspect este dezavantajul principal pentru un array.

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

Page 15: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vectorul dinamic

Solutia pentru a evita dezavantajul principal (macar partial)este sa folosim un vector dinamic.

Vectorul dinamic este un vector a carui dimensiune poate fimodificata.

Ideea de baza este simpla:

Definim un vector de n elemente.Daca la un moment dat vectorul este plin (toate pozitiile suntocupate), dar mai trebuie sa adaugam elemente, vom defini unalt vector, mai mare, si vom copia elementele din acest vectorın cel nou. Dupa ce am copiat elementele, vectorul nou devinevectorul nostru.

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

Page 16: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vectorul dinamic

Solutia pentru a evita dezavantajul principal (macar partial)este sa folosim un vector dinamic.

Vectorul dinamic este un vector a carui dimensiune poate fimodificata.

Ideea de baza este simpla:

Definim un vector de n elemente.Daca la un moment dat vectorul este plin (toate pozitiile suntocupate), dar mai trebuie sa adaugam elemente, vom defini unalt vector, mai mare, si vom copia elementele din acest vectorın cel nou. Dupa ce am copiat elementele, vectorul nou devinevectorul nostru.

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

Page 17: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vecotrl dinamic II

Pentru a reprezenta un vector dinamic avem nevoie de 3informatii:

numarul maxim de elemente care ıncap ın vector (capacitatea)numarul de elemente care sunt stocate ın vectorvectorul efectiv

Pentru ca avem nevoie de mai multe informatii, care tottimpul trebuie sa fie folosite ımpreuna, vom defini un tip noude date, pentru a reprezenta un vector dinamic:

VectorDinamic:cap: ıntreglen: ıntregelemente: TElem[]

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

Page 18: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vecotrl dinamic II

Pentru a reprezenta un vector dinamic avem nevoie de 3informatii:

numarul maxim de elemente care ıncap ın vector (capacitatea)numarul de elemente care sunt stocate ın vectorvectorul efectiv

Pentru ca avem nevoie de mai multe informatii, care tottimpul trebuie sa fie folosite ımpreuna, vom defini un tip noude date, pentru a reprezenta un vector dinamic:

VectorDinamic:cap: ıntreglen: ıntregelemente: TElem[]

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

Page 19: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector Dinamic III

Vectorul Dinamic este o structura de date, ıl vom folosi ca saimplementam diferite containere.

Orice container poate fi implementat folosind un vectordinamic ca structura de date.

Inainte de a vedea cum putem implementa containere folosindun vector dinamic, vom discuta despre cateva operatii pentruvector dinamic (la modul general).

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

Page 20: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Creare vector dinamic

Cum creem un vector dinamic?

In general operatia de creare se ocupa cu initializareaatributelor. Un vector dinamic are 3 atribute: cap, len,elemente. Cu ce le initializam?

subalgorithm creeaza() is:this.len = 0this.cap = 10 //ar putea fi orice valoare pozitiva@ initializam this.elemente ca un vector de 10 elemente de tip TElem

end subalgorithm

cu @ notam instructiuni nestandard. Initializarea vectoruluidepinde de limbajul de programare (de exemplu ın Java arveni ceva de genul this.elemente = new TElem[10])

Complexitate: Θ(1)

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

Page 21: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Creare vector dinamic

Cum creem un vector dinamic?

In general operatia de creare se ocupa cu initializareaatributelor. Un vector dinamic are 3 atribute: cap, len,elemente. Cu ce le initializam?

subalgorithm creeaza() is:this.len = 0this.cap = 10 //ar putea fi orice valoare pozitiva@ initializam this.elemente ca un vector de 10 elemente de tip TElem

end subalgorithm

cu @ notam instructiuni nestandard. Initializarea vectoruluidepinde de limbajul de programare (de exemplu ın Java arveni ceva de genul this.elemente = new TElem[10])

Complexitate:

Θ(1)

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

Page 22: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Creare vector dinamic

Cum creem un vector dinamic?

In general operatia de creare se ocupa cu initializareaatributelor. Un vector dinamic are 3 atribute: cap, len,elemente. Cu ce le initializam?

subalgorithm creeaza() is:this.len = 0this.cap = 10 //ar putea fi orice valoare pozitiva@ initializam this.elemente ca un vector de 10 elemente de tip TElem

end subalgorithm

cu @ notam instructiuni nestandard. Initializarea vectoruluidepinde de limbajul de programare (de exemplu ın Java arveni ceva de genul this.elemente = new TElem[10])

Complexitate: Θ(1)

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

Page 23: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - adaugare

Cum adaugam un element nou ıntr-un vector dinamic?

Unde ıl punem? (sa presupunem ca nu avem restrictiireferitoare la ordinea elementelor)

La ce trebuie sa fim atenti?

subalgorithm adauga(e:TElem) is:if this.len == this.cap then //vectorul e plin

this.cap = this.cap * 2 //dublam capacitatea@initializam vectNou ca un vector cu this.cap elemente de tip TElemfor i = 0; i < this.len; 1 execute //copiem elementele existente

vectNou[i] = this.elemente[i]end forthis.elemente = vectNou //this.elemente va retine adresa lui vectNou

end if//acum stim sigur ca avem loc ın vectorul elementethis.elemente[this.len] = ethis.len = this.len + 1

end subalgorithm

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

Page 24: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - adaugare

Cum adaugam un element nou ıntr-un vector dinamic?

Unde ıl punem? (sa presupunem ca nu avem restrictiireferitoare la ordinea elementelor)

La ce trebuie sa fim atenti?

subalgorithm adauga(e:TElem) is:if this.len == this.cap then //vectorul e plin

this.cap = this.cap * 2 //dublam capacitatea@initializam vectNou ca un vector cu this.cap elemente de tip TElemfor i = 0; i < this.len; 1 execute //copiem elementele existente

vectNou[i] = this.elemente[i]end forthis.elemente = vectNou //this.elemente va retine adresa lui vectNou

end if//acum stim sigur ca avem loc ın vectorul elementethis.elemente[this.len] = ethis.len = this.len + 1

end subalgorithm

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

Page 25: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - adaugare

Cat este complexitatea pentru operatia adauga?

Avem caz favorabil, cand exista spatiu liber ın vector, ın acestcaz complexitatea este Θ(1).

In caz defavorabil, trebuie sa realocam si sa copiem elementeleexistente, complexitatea este Θ(n).

Dar, cazul defavorabil se ıntampla rar (daca la redimensionareınmultim capacitatea existenta cu o valoare, de exemplu 2)deci complexitatea este Θ(1) amortizat

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

Page 26: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - adaugare

Cat este complexitatea pentru operatia adauga?

Avem caz favorabil, cand exista spatiu liber ın vector, ın acestcaz complexitatea este Θ(1).

In caz defavorabil, trebuie sa realocam si sa copiem elementeleexistente, complexitatea este Θ(n).

Dar, cazul defavorabil se ıntampla rar (daca la redimensionareınmultim capacitatea existenta cu o valoare, de exemplu 2)deci complexitatea este Θ(1) amortizat

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

Page 27: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - adaugare

Cat este complexitatea pentru operatia adauga?

Avem caz favorabil, cand exista spatiu liber ın vector, ın acestcaz complexitatea este Θ(1).

In caz defavorabil, trebuie sa realocam si sa copiem elementeleexistente, complexitatea este Θ(n).

Dar, cazul defavorabil se ıntampla rar (daca la redimensionareınmultim capacitatea existenta cu o valoare, de exemplu 2)deci complexitatea este Θ(1) amortizat

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

Page 28: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - adaugare pe pozitie

Cum adaugam un elemente pe o anumita pozitie?

La ce trebuie sa fim atenti?

subalgorithm adaugaPozitie(e:TElem, poz:Integer) is://prima data verificam pozitiaif poz < 0 OR poz > this.len then

@eroare, pozitia nu e validaend ifif this.len == this.cap then //vectorul e plin

this.cap = this.cap * 2 //dublam capacitatea@initializam vectNou ca un vector cu this.cap elemente de tip TElemfor i = 0; i < this.len; 1 execute //copiem elementele existente

vectNou[i] = this.elemente[i]end forthis.elemente = vectNou //this.elemente va retine adresa lui vectNou

end if//continuare pe pagina urmatoare

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

Page 29: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

//mutam elementele la dreapta, de la final pana la poz@eroare, pozitia nu e validathis.elemente[i] = this.elemente[i-1]

end forthis.elemente[poz] = ethis.len = this.len + 1

end subalgorithm

Complexitate:

O(n)

Caz favorabil: Θ(1) - adaugam la finalCaz defavorabil: Θ(n) - trebuie sa redimensionam (sauadaugam la ınceput)Caz mediu: Θ(n)

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

Page 30: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

//mutam elementele la dreapta, de la final pana la poz@eroare, pozitia nu e validathis.elemente[i] = this.elemente[i-1]

end forthis.elemente[poz] = ethis.len = this.len + 1

end subalgorithm

Complexitate: O(n)

Caz favorabil: Θ(1) - adaugam la finalCaz defavorabil: Θ(n) - trebuie sa redimensionam (sauadaugam la ınceput)Caz mediu: Θ(n)

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

Page 31: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - stergere

Cum stergem un element de pe o pozitie?La ce trebuie sa fim atenti?

pozitia sa fie validatrebuie sa redimensionam?

function stergePozitie(poz: Integer) is://prima data verificam pozitiaif poz < 0 OR poz ≥ this.len then

@eroare, pozitia nu e validaend ifelemSters = this.elemente[poz]for i = poz; i < this.len-1; 1 execute

this.elemente[i] = this.element[i+1]end forthis.len = this.len - 1return elemSters

end function

Complexitate: O(n)

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

Page 32: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - stergere

Cum stergem un element de pe o pozitie?La ce trebuie sa fim atenti?

pozitia sa fie validatrebuie sa redimensionam?

function stergePozitie(poz: Integer) is://prima data verificam pozitiaif poz < 0 OR poz ≥ this.len then

@eroare, pozitia nu e validaend ifelemSters = this.elemente[poz]for i = poz; i < this.len-1; 1 execute

this.elemente[i] = this.element[i+1]end forthis.len = this.len - 1return elemSters

end function

Complexitate:

O(n)

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

Page 33: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Vector dinamic - stergere

Cum stergem un element de pe o pozitie?La ce trebuie sa fim atenti?

pozitia sa fie validatrebuie sa redimensionam?

function stergePozitie(poz: Integer) is://prima data verificam pozitiaif poz < 0 OR poz ≥ this.len then

@eroare, pozitia nu e validaend ifelemSters = this.elemente[poz]for i = poz; i < this.len-1; 1 execute

this.elemente[i] = this.element[i+1]end forthis.len = this.len - 1return elemSters

end function

Complexitate: O(n)

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

Page 34: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie pe vector dinamic

Care e specificul containerului Colectie?

Elementele nu au pozitiiPot exista duplicate

Reprezentarea colectiei (reprezentarea se refera laatribute/variabilele folosite pentru a reprezenta containerul).

Ce variabile ne trebuie pentru un vector dinamic?

Ne mai trebuie ceva extra (sau modificat) pentru partea deColectie?

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

Page 35: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie pe vector dinamic

Care e specificul containerului Colectie?

Elementele nu au pozitiiPot exista duplicate

Reprezentarea colectiei (reprezentarea se refera laatribute/variabilele folosite pentru a reprezenta containerul).

Ce variabile ne trebuie pentru un vector dinamic?

Ne mai trebuie ceva extra (sau modificat) pentru partea deColectie?

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

Page 36: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie pe vector dinamic - reprezentare

Colectie:elemente: TElem[]len: Integercap: Integer

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

Page 37: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie pe vector dinamic - operatii

Ce operatii avea Colectia?

creeazaadaugastergecautadimensiuneiterator

Vom implementa pe rand fiecare operatie.

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

Page 38: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie pe vector dinamic - operatii

Ce operatii avea Colectia?

creeazaadaugastergecautadimensiuneiterator

Vom implementa pe rand fiecare operatie.

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

Page 39: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - creeaza

Ce trebuie sa facem pt a creea o Colectie?

subalgorithm creeaza() is:this.len = 0this.cap = 10@initializam this.elemente, vector cu 10 elemente de tip TElem

Complexitate: Θ(1)

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

Page 40: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - creeaza

Ce trebuie sa facem pt a creea o Colectie?

subalgorithm creeaza() is:this.len = 0this.cap = 10@initializam this.elemente, vector cu 10 elemente de tip TElem

Complexitate:

Θ(1)

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

Page 41: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - creeaza

Ce trebuie sa facem pt a creea o Colectie?

subalgorithm creeaza() is:this.len = 0this.cap = 10@initializam this.elemente, vector cu 10 elemente de tip TElem

Complexitate: Θ(1)

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

Page 42: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - adauga

Ce trebuie sa facem la adaugare?

Cum se adauga ın general ıntr-un vector dinamic?

Unde se adauga ın general ıntr-un vector dinamic?

Cum combinam aceste lucruri cu specificul containeruluiColectie?

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

Page 43: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

subalgorithm adauga(e: TElem) is:if this.len == this.cap then //colectia e plina

this.cap = this.cap * 2 //dublam capacitatea@initializam vectNou ca un vector cu this.cap elemente de tip TElemfor i = 0; i < this.len; 1 execute //copiem elementele existente

vectNou[i] = this.elemente[i]end forthis.elemente = vectNou //this.elemente va retine adresa lui vectNou

end if//acum stim sigur ca avem loc ın vectorul elementethis.elemente[this.len] = ethis.len = this.len + 1

end subalgorithm

Complexitate:

Θ(1)amortizat

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

Page 44: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

subalgorithm adauga(e: TElem) is:if this.len == this.cap then //colectia e plina

this.cap = this.cap * 2 //dublam capacitatea@initializam vectNou ca un vector cu this.cap elemente de tip TElemfor i = 0; i < this.len; 1 execute //copiem elementele existente

vectNou[i] = this.elemente[i]end forthis.elemente = vectNou //this.elemente va retine adresa lui vectNou

end if//acum stim sigur ca avem loc ın vectorul elementethis.elemente[this.len] = ethis.len = this.len + 1

end subalgorithm

Complexitate: Θ(1)amortizat

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

Page 45: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectia - sterge

Ce trebuie sa facem la stergere?

Cum stergem ın general dintr-un vector dinamic?

Cum combinam stergerea cu specificul containerului Colecctie?

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

Page 46: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

function sterge(e: TElem) is:found: Booleanfound = falseindex: Integerindex = 0while found == false AND index < this.len execute

if this.elemente[index] == e thenfound = true

elseindex = index + 1

end ifend whileif found then

this.elemente[index] = this.elemente[this.len-1]this.len = this.len - 1

end ifreturn found

end function

Complexitate:

O(n)

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

Page 47: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

function sterge(e: TElem) is:found: Booleanfound = falseindex: Integerindex = 0while found == false AND index < this.len execute

if this.elemente[index] == e thenfound = true

elseindex = index + 1

end ifend whileif found then

this.elemente[index] = this.elemente[this.len-1]this.len = this.len - 1

end ifreturn found

end function

Complexitate: O(n)

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

Page 48: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - cauta

Ce trebuie sa facem la cautare?

function cauta(e: TElem) is:found: Booleanfound = falseindex: Integerindex = 0while found == false AND index < this.len execute

if this.elemente[index] == e thenfound = true

elseindex = index + 1

end ifend whilereturn found

end function

Complexitate: O(n)

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

Page 49: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - cauta

Ce trebuie sa facem la cautare?

function cauta(e: TElem) is:found: Booleanfound = falseindex: Integerindex = 0while found == false AND index < this.len execute

if this.elemente[index] == e thenfound = true

elseindex = index + 1

end ifend whilereturn found

end function

Complexitate:

O(n)

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

Page 50: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - cauta

Ce trebuie sa facem la cautare?

function cauta(e: TElem) is:found: Booleanfound = falseindex: Integerindex = 0while found == false AND index < this.len execute

if this.elemente[index] == e thenfound = true

elseindex = index + 1

end ifend whilereturn found

end function

Complexitate: O(n)

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

Page 51: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - dimensiune

Ce trebuie sa facem pentru a returna numarul de elemente dinColectie?

function dimensiune() is:return this.len

end function

Complexitate: Θ(1)

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

Page 52: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - dimensiune

Ce trebuie sa facem pentru a returna numarul de elemente dinColectie?

function dimensiune() is:return this.len

end function

Complexitate:

Θ(1)

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

Page 53: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - dimensiune

Ce trebuie sa facem pentru a returna numarul de elemente dinColectie?

function dimensiune() is:return this.len

end function

Complexitate: Θ(1)

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

Page 54: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator

Pana acum am discutat despre iterator la containere la modulabstract.

Am spus ca un iterator are un element curent din container, sitrebuie sa poata sa treaca la elementul urmator.

Acum ca avem o structura de date (vectorul dinamic) putemdiscuta despre implementarea iteratorului pentru Colectie.

Daca retinem elementele ıntr-un vector dinamic, care este celmai simplu mod de a retine un element curent?

Varianta cea mai simpla de a retine un element curent ıntr-unvector dinamic este sa retinem pozitia elementului, decielementul curent din iteratorul pentru vector dinamic, va fi opozitie.

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

Page 55: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator

Pana acum am discutat despre iterator la containere la modulabstract.

Am spus ca un iterator are un element curent din container, sitrebuie sa poata sa treaca la elementul urmator.

Acum ca avem o structura de date (vectorul dinamic) putemdiscuta despre implementarea iteratorului pentru Colectie.

Daca retinem elementele ıntr-un vector dinamic, care este celmai simplu mod de a retine un element curent?

Varianta cea mai simpla de a retine un element curent ıntr-unvector dinamic este sa retinem pozitia elementului, decielementul curent din iteratorul pentru vector dinamic, va fi opozitie.

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

Page 56: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator

Ce operatii avea iteratorul?

creeaza - creeaza un iteratorelement - returneaza elementul curenturmator - trece la urmatorul element curentvalid - verifica daca elementul curent din iterator este valid

Ce campuri ar trebui sa aiba iteratorul pentru o Colectiereprezentata pe un vector dinamic?

IteratorColectie:col: Colectiecurent: Integer

E important ca sa retinem ın iterator si colectia, pentru caacolo sunt elementele. Tot timpul iteratorul retine sistructura/containerul peste care itereaza.

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

Page 57: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator

Ce operatii avea iteratorul?

creeaza - creeaza un iteratorelement - returneaza elementul curenturmator - trece la urmatorul element curentvalid - verifica daca elementul curent din iterator este valid

Ce campuri ar trebui sa aiba iteratorul pentru o Colectiereprezentata pe un vector dinamic?

IteratorColectie:col: Colectiecurent: Integer

E important ca sa retinem ın iterator si colectia, pentru caacolo sunt elementele. Tot timpul iteratorul retine sistructura/containerul peste care itereaza.

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

Page 58: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator

Ce operatii avea iteratorul?

creeaza - creeaza un iteratorelement - returneaza elementul curenturmator - trece la urmatorul element curentvalid - verifica daca elementul curent din iterator este valid

Ce campuri ar trebui sa aiba iteratorul pentru o Colectiereprezentata pe un vector dinamic?

IteratorColectie:col: Colectiecurent: Integer

E important ca sa retinem ın iterator si colectia, pentru caacolo sunt elementele. Tot timpul iteratorul retine sistructura/containerul peste care itereaza.

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

Page 59: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - creeaza

Ce ar trebui sa faca operatia creeaza?

subalgorithm creeaza (col: Colectie) is:this.col = colthis.curent = 0

end subalgorithm

Complexitate: Θ(1)

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

Page 60: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - creeaza

Ce ar trebui sa faca operatia creeaza?

subalgorithm creeaza (col: Colectie) is:this.col = colthis.curent = 0

end subalgorithm

Complexitate:

Θ(1)

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

Page 61: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - creeaza

Ce ar trebui sa faca operatia creeaza?

subalgorithm creeaza (col: Colectie) is:this.col = colthis.curent = 0

end subalgorithm

Complexitate: Θ(1)

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

Page 62: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - element

Ce ar trebui sa faca operatia element?

function element() is:return this.col.elemente[this.curent]

end function

Complexitate: Θ(1)

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

Page 63: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - element

Ce ar trebui sa faca operatia element?

function element() is:return this.col.elemente[this.curent]

end function

Complexitate:

Θ(1)

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

Page 64: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - element

Ce ar trebui sa faca operatia element?

function element() is:return this.col.elemente[this.curent]

end function

Complexitate: Θ(1)

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

Page 65: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - urmator

Ce ar trebui sa faca operatia urmator?

subalgorithm urmator() is:this.curent = this.curent + 1

end subalgorithm

Complexitate: Θ(1)

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

Page 66: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - urmator

Ce ar trebui sa faca operatia urmator?

subalgorithm urmator() is:this.curent = this.curent + 1

end subalgorithm

Complexitate:

Θ(1)

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

Page 67: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - urmator

Ce ar trebui sa faca operatia urmator?

subalgorithm urmator() is:this.curent = this.curent + 1

end subalgorithm

Complexitate: Θ(1)

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

Page 68: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - valid

Ce ar trebui sa faca operatia valid?

function valid() is:if this.curent < this.col .len then

return adevaratelse

return falsend if

end function

Complexitate: Θ(1)

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

Page 69: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - valid

Ce ar trebui sa faca operatia valid?

function valid() is:if this.curent < this.col .len then

return adevaratelse

return falsend if

end function

Complexitate:

Θ(1)

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

Page 70: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator - valid

Ce ar trebui sa faca operatia valid?

function valid() is:if this.curent < this.col .len then

return adevaratelse

return falsend if

end function

Complexitate: Θ(1)

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

Page 71: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Colectie - iterator

Colectia are si o operatie numita iterator. Scopul operatieieste sa creeze si sa returneze un iterator pentru Colectie.

function iterator() is:it = creeaza(this) //apelam creeaza de la Iteratorreturn it

end function

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

Page 72: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Alte containere

Orice container (ordonat sau neordonat) poate fi implementatfolosind un vector dinamic ca reprezentare.

Sa vedem cateva exemple (nu implementari complete, ca laColectie), doar reprezentarea si o operatie.

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

Page 73: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime pe Vector Dinamic

Daca vrem sa implementam o Multime folosind vectoruldinamic, cum ar trebui sa reprezentam Multimea?

Multime:len: ıntregcap: ıntregelemente: TElem[]

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

Page 74: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime pe Vector Dinamic

Daca vrem sa implementam o Multime folosind vectoruldinamic, cum ar trebui sa reprezentam Multimea?

Multime:len: ıntregcap: ıntregelemente: TElem[]

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

Page 75: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia de adaugare?

Nu exista pozitii ıntr-o Multime, deci putem pune elementulunde vrem noi, si cel mai simplu este sa-l punem la sfarsit.

Fiind Multime, elementele trebuie sa fie unice, deci ınainte dea adauga un element nou, trebuie sa verificam restulelementelor.

Fiind Vector Dinamic, daca elementul trebuie adaugat, trebuiesa verificam daca mai avem loc liber, si daca nu, alocam unvector mai mare

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

Page 76: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia de adaugare?

Nu exista pozitii ıntr-o Multime, deci putem pune elementulunde vrem noi, si cel mai simplu este sa-l punem la sfarsit.

Fiind Multime, elementele trebuie sa fie unice, deci ınainte dea adauga un element nou, trebuie sa verificam restulelementelor.

Fiind Vector Dinamic, daca elementul trebuie adaugat, trebuiesa verificam daca mai avem loc liber, si daca nu, alocam unvector mai mare

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

Page 77: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime pe Vector Dinamic - adaugare

subalgorithm adauga (e: TElem) is://prima data verificam daca mai exista elementuli: Integergasit: Booleani = 0gasit = falswhile i < this.len AND gasit == fals execute

if this.elemente[i] == e thengasit = adevarat

end ifi = i + 1

end whileif gasit == fals then

//trebuie adaugat//continuam pe pagina urmatoare

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

Page 78: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

if this.len == this.cap the//nu mai avem loc liber.@initializam vectNou, vector cu this.cap*2 elementei: Integerfor i = 0, i < this.len, 1 execute

vectNou[i] = this.elemente[i]end forthis.elemente = vectNou //ınlocuim vectorulthis.cap = this.cap * 2

end ifthis.elemente[this.len] = ethis.len = this.len + 1

end ifend subalgorithm

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

Page 79: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime pe Vector Dinamic - adaugare

Cat este complexitatea pentru adauga?

Complexitatea depinde si de cautare

Caz favorabil: Θ(1) (gasesc elementul pe prima pozitie)Caz defavorabil: Θ(n) (elementul nu se gaseste si trebuieadagat)Caz mediu: Θ(n) (din cauza cautarii nu mai am complexitateamortizata)Complexitatea totala: O(n)

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

Page 80: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime pe Vector Dinamic - adaugare

Cat este complexitatea pentru adauga?

Complexitatea depinde si de cautare

Caz favorabil: Θ(1) (gasesc elementul pe prima pozitie)Caz defavorabil: Θ(n) (elementul nu se gaseste si trebuieadagat)Caz mediu: Θ(n) (din cauza cautarii nu mai am complexitateamortizata)Complexitatea totala: O(n)

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

Page 81: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Lista pe Vector Dinamic

Daca vrem sa implementam o Lista folosind Vectorul Dinamic,cum ar trebui sa reprezentam Lista?

Lista:len: ıntregcap: ıntregelemente: TElem[]

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

Page 82: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Lista pe Vector Dinamic

Daca vrem sa implementam o Lista folosind Vectorul Dinamic,cum ar trebui sa reprezentam Lista?

Lista:len: ıntregcap: ıntregelemente: TElem[]

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

Page 83: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Lista pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia de adaugare?

La Lista exista pozitii, si exista operatia de a adauga unelement pe o pozitie. Deci nu putem pune elementul pur sisimplu la final (exceptand cazul daca pozitia ne spune sa-lpunem acolo).

In primul rand trebuie sa verificam sa avem o pozitie valida.

Si pentru a elibera pozitia respectiva, trebuie sa mutamelementele de dupa pozitia respectiva cu o pozitie mai ladreapta.

Fiind Vector Dinamic, daca elementul trebuie adaugat, trebuiesa verificam daca mai avem loc liber, si daca nu, alocam unvector mai mare

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

Page 84: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Lista pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia de adaugare?

La Lista exista pozitii, si exista operatia de a adauga unelement pe o pozitie. Deci nu putem pune elementul pur sisimplu la final (exceptand cazul daca pozitia ne spune sa-lpunem acolo).

In primul rand trebuie sa verificam sa avem o pozitie valida.

Si pentru a elibera pozitia respectiva, trebuie sa mutamelementele de dupa pozitia respectiva cu o pozitie mai ladreapta.

Fiind Vector Dinamic, daca elementul trebuie adaugat, trebuiesa verificam daca mai avem loc liber, si daca nu, alocam unvector mai mare

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

Page 85: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Lista pe Vector Dinamic - adaugarePozitie

subalgorithm adaugaPozitie (poz: Integer, e: TElem) is://prima data verificam pozitiaif poz < 0 or poz > this.len then

@arunca exceptie, pozitie invalidaend ifi: Integerif this.len == this.cap then

//nu mai avem loc liber.@ initializam vectNou, un vector cu this.cap*2 elementefor i = 0, i < this.len, 1 execute

vectNou[i] = this.elemente[i]end forthis.elemente = vectNou //ınlocuim vectorulthis.cap = this.cap * 2

end if//continuam pe pagina urmatoare

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

Page 86: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

//mutam elementele la dreapta. Incepem de la capatfor i = this.len-1, i ≥ poz, -1 execute

this.elemente[i+1] = this.elemente[i]end for//punem elementul pe pozitia pozthis.elemente[poz] = ethis.len = this.len + 1

end subalgorithm

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

Page 87: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Lista pe Vector Dinamic - adaugarePozitie

Cat este complexitatea pentru adaugaPozitie?

Complexitatea este:

Caz favorabil: Θ(1) (adaugam la sfarsit si nu trebuie realocat)Caz defavorabil: Θ(n) (adaugam la ınceput sau trebuierealocat)Caz mediu: Θ(n)Complexitatea totala: O(n)

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

Page 88: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Lista pe Vector Dinamic - adaugarePozitie

Cat este complexitatea pentru adaugaPozitie?

Complexitatea este:

Caz favorabil: Θ(1) (adaugam la sfarsit si nu trebuie realocat)Caz defavorabil: Θ(n) (adaugam la ınceput sau trebuierealocat)Caz mediu: Θ(n)Complexitatea totala: O(n)

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

Page 89: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic

Daca vrem sa implementam un Dictionar folosind VectorulDinamic, cum ar trebui sa reprezentam Dictionarul?

Ne trebuie ceva similar cu ce am avut pana acum, dar la unDictionar avem perechi cheie-valoare si trebuie sa tinem contde acest lucru. Avem doua variante:

Definim separat un tip Pereche, care este alcatuit dintr-o cheiesi o valoare. In acest caz vom avea un singur vector, cuelemente de tip Pereche.Nu definim tip Pereche si vom avea 2 vectori, unul cu chei siunul cu valori. Valoarea de pe pozitia i apartine cheii de pepozitia i.

Indiferent ce alegem, reprezentarea fiind un Vector Dinamic,ne trebuie lungime si capacitate.

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

Page 90: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic

Daca vrem sa implementam un Dictionar folosind VectorulDinamic, cum ar trebui sa reprezentam Dictionarul?

Ne trebuie ceva similar cu ce am avut pana acum, dar la unDictionar avem perechi cheie-valoare si trebuie sa tinem contde acest lucru. Avem doua variante:

Definim separat un tip Pereche, care este alcatuit dintr-o cheiesi o valoare. In acest caz vom avea un singur vector, cuelemente de tip Pereche.Nu definim tip Pereche si vom avea 2 vectori, unul cu chei siunul cu valori. Valoarea de pe pozitia i apartine cheii de pepozitia i.

Indiferent ce alegem, reprezentarea fiind un Vector Dinamic,ne trebuie lungime si capacitate.

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

Page 91: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - cu Pereche

Pereche:cheie: TCheie //TCheie e tipul cheilorvaloarea: TValoare //TValoare e tipul valorilor

Dictionar:len: ıntregcap: ıntregelemente: Pereche[]

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

Page 92: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia de adaugare?

Nu exista pozitii ın Dictionar, putem pune pereche unde vremnoi.

Trebuie sa verificam daca mai exista cheia ın dictionar, dacada, vom ınlocui valoarea asociata.

Fiind Vector Dinamic, daca elementul trebuie adaugat, trebuiesa verificam daca mai avem loc liber, si daca nu, alocam unvector mai mare

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

Page 93: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia de adaugare?

Nu exista pozitii ın Dictionar, putem pune pereche unde vremnoi.

Trebuie sa verificam daca mai exista cheia ın dictionar, dacada, vom ınlocui valoarea asociata.

Fiind Vector Dinamic, daca elementul trebuie adaugat, trebuiesa verificam daca mai avem loc liber, si daca nu, alocam unvector mai mare

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

Page 94: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - adaugare

subalgorithm adauga (c: TCheie, v: TValoare) is://prima data verificam daca mai exista cheiai: Integergasit: Booleani = 0gasit = falswhile i < this.len AND gasit == fals execute

if this.elemente[i].cheie == c thengasit = adevarat//ınlocuim valoareathis.elemente[i].valoare = v

end ifi = i + 1

end whileif gasit == fals then

//trebuie sa adaugam. Continuam pe pagina urmatoare

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

Page 95: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

if this.len == this.cap then//nu mai avem loc liber.@initializam vectNou, un vector cu this.cap*2 elementei: Integerfor i = 0, i < this.len, 1 execute

vectNou[i] = this.elemente[i]end forthis.elemente = vectNou //ınlocuim vectorulthis.cap = this.cap * 2

end ifp: Perechep.cheie = cp.valoare = vthis.elemente[this.len] = pthis.len = this.len + 1

end ifend subalgorithm

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

Page 96: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - adaugare

Cat este complexitatea pentru adauga?

Complexitatea este:

Caz favorabil: Θ(1) (cheia este pe prima pozitie ın vector)Caz defavorabil: Θ(n) (cheia nu se gaseste sau trebuierealocat)Caz mediu: Θ(n)Complexitatea totala: O(n)

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

Page 97: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - adaugare

Cat este complexitatea pentru adauga?

Complexitatea este:

Caz favorabil: Θ(1) (cheia este pe prima pozitie ın vector)Caz defavorabil: Θ(n) (cheia nu se gaseste sau trebuierealocat)Caz mediu: Θ(n)Complexitatea totala: O(n)

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

Page 98: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - fara Pereche

Reprezentarea Dictionarului:

Dictionar:len: ıntregcap: ıntregchei: TCheie[]valori: TValoare[]

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

Page 99: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - adaugare

subalgorithm adauga (c: TCheie, v: TValoare) is://prima data verificam daca mai exista cheiai: Integergasit: Booleani = 0gasit = falswhile i < this.len AND gasit == fals execute

if this.chei[i] == c thengasit = adevarat//ınlocuim valoareathis.valori[i] = v

end ifi = i + 1

end whileif gasit == fals then

//trebuie sa adaugam. Continuam pe pagina urmatoare

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

Page 100: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

if this.len == this.cap then//nu mai avem loc liber.cNou = @un vector cu this.cp*2 elementevNou = @un vector cu this.cp*2 elementei: Integerfor i = 0, i < this.len, 1 execute

cNou[i] = this.chei[i]vNou[i] = this.valori[i]

end forthis.chei = cNou //ınlocuim vectorul de cheithis.valori = vNou //ınlocuim vectorul si de valorithis.cap = this.cap * 2

end ifthis.chei[this.len] = cthis.valori[this.len] = vthis.len = this.len + 1

end ifend subalgorithm

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

Page 101: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - adaugare

Cat este complexitatea pentru adauga?

Complexitatea este:

Caz favorabil: Θ(1) (cheia este pe prima pozitie ın vector)Caz defavorabil: Θ(n) (cheia nu se gaseste sau trebuierealocat)Caz mediu: Θ(n)Complexitatea totala: O(n)

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

Page 102: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Dictionar pe Vector Dinamic - adaugare

Cat este complexitatea pentru adauga?

Complexitatea este:

Caz favorabil: Θ(1) (cheia este pe prima pozitie ın vector)Caz defavorabil: Θ(n) (cheia nu se gaseste sau trebuierealocat)Caz mediu: Θ(n)Complexitatea totala: O(n)

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

Page 103: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD MultiDictionar pe Vector Dinamic

Daca vrem sa implementam un MultiDictionar folosindVectorul Dinamic, cum ar trebui sa reprezentamMultiDictionarul?

In general avem doua variante pentru a reprezenta unMultiDictionar

Retinem perechi cheie - valoare (ca la un Dictionar) darpermitem mai multe perechi cu aceeasi cheie, pentru situatiicand o cheie are mai multe valoriRetinem perechi cheie - lista de valori, ın acest caz cheile suntunice

Lista de valori - nu trebuie sa fie neaparat TAD Lista, poate fiun Vector Dinamic sau alta structura de date.

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

Page 104: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD MultiDictionar pe Vector Dinamic

Daca vrem sa implementam un MultiDictionar folosindVectorul Dinamic, cum ar trebui sa reprezentamMultiDictionarul?

In general avem doua variante pentru a reprezenta unMultiDictionar

Retinem perechi cheie - valoare (ca la un Dictionar) darpermitem mai multe perechi cu aceeasi cheie, pentru situatiicand o cheie are mai multe valoriRetinem perechi cheie - lista de valori, ın acest caz cheile suntunice

Lista de valori - nu trebuie sa fie neaparat TAD Lista, poate fiun Vector Dinamic sau alta structura de date.

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

Page 105: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD MultiDictionar pe Vector Dinamic

Varianta cu perechi cheie-valoare (prima varianta de pe paginaanterioara) seamana foarte mult cu ce am facut la Dictionar,dar nu verificam daca o cheie mai exista.

Avem si aici varianta ın care avem o structura separata pentruo Pereche (si un singur vector de Perechi), sau varianta ın careavem doi vectori (unul pentru chei si unul pentru valori).

Pentru varianta cu lista de valori, putem defini separat ostructura Pereche (alcatuita dintr-o cheie si un vector dinamicde valori) sau putem lucra fara Pereche, cu un vector de cheisi un vector dinamic de vectori dinamici (dar e mai complicatadecat varianta anterioara).

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

Page 106: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD MultiDictionar pe Vector Dinamic

Daca avem o structura Pereche formata dintr-o cheie si unVector Dinamic de valori, cum reprezentam MultiDictionarul?

Pereche:cheie: TCheievalori: TValoare[]len: ıntregcap: ıntreg

MultiDictionar:elemente: Pereche[]len: ıntregcap: ıntreg

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

Page 107: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD MultiDictionar pe Vector Dinamic

Daca avem o structura Pereche formata dintr-o cheie si unVector Dinamic de valori, cum reprezentam MultiDictionarul?

Pereche:cheie: TCheievalori: TValoare[]len: ıntregcap: ıntreg

MultiDictionar:elemente: Pereche[]len: ıntregcap: ıntreg

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

Page 108: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD MultiDictionar pe Vector Dinamic

Daca avem o structura Pereche formata dintr-o cheie si unVector Dinamic de valori, cum reprezentam MultiDictionarul?

Pereche:cheie: TCheievalori: TValoare[]len: ıntregcap: ıntreg

MultiDictionar:elemente: Pereche[]len: ıntregcap: ıntreg

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

Page 109: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD MultiDictionar pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia adaugare?

subalgorithm adauga (c: TCheie, v: TValoare) is://prima data verificam daca mai exista cheiai: Integergasit: Booleani = 0gasit = falswhile i < this.len AND gasit == fals execute

if this.elemente[i].cheie == c thengasit = adevarat//trebuie sa adaugam valoarea//valorile sunt retinute ıntr-un VD, poate trebuie realocat//continuam pe pagina urmatoare

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

Page 110: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD MultiDictionar pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia adaugare?

subalgorithm adauga (c: TCheie, v: TValoare) is://prima data verificam daca mai exista cheiai: Integergasit: Booleani = 0gasit = falswhile i < this.len AND gasit == fals execute

if this.elemente[i].cheie == c thengasit = adevarat//trebuie sa adaugam valoarea//valorile sunt retinute ıntr-un VD, poate trebuie realocat//continuam pe pagina urmatoare

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

Page 111: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

if this.elemente[i].len == this.elemente[i].cap then@alocam vNou, un vector cu this.elemente[i].cap * 2 elementeindex: Intregfor index = 0, index < this.elemente[i].len, 1 execute

vNou[index] = this.elemente[i].valori[index]end forthis.elemente[i].valori = vNouthis.elemente[i].cap = this.elemente[i].cap * 2

end if//punem valoarea in vectorul de valorithis.elemente[i].valori[this.elemente[i].len] = vthis.elemente[i].len = this.elemente[i].len + 1

end ifi = i + 1

end while//continuam pe pagina urmatoare

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

Page 112: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

if gasit == fals then//trebuie sa adaugam o pereche noua. Verificam daca avem spatiuif this.len == this.cap then

//nu mai avem loc liber.@initializam vectNou, un vector cu this.cap*2 elementeindex: Integerfor index = 0, index < this.len, 1 execute

vectNou[index] = this.elemente[index]end forthis.elemente = vectNou //ınlocuim vectorul

this.cap = this.cap * 2end ifp: Perechep.cheie = cp.cap = 4 //putem pune cate pozitii vrem sa avem initial@initializam p.valori, un vector de p.cap elementep.valori[0] = v //punem valoarea in vectorp.len = 1 //am adaugat valoarea v//continuam pe pagina urmatoare

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

Page 113: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

this.elemente[this.len] = pthis.len = this.len + 1

end ifend subalgorithm

Cat este complexitatea algoritmului?

Avem caz favorabil: Θ(1) - adaugam o valoare la prima cheiesi nu trebuie realocat.Caz devaforabil: Θ(n + m), unde n este numarul total de cheisi m este numarul total de valori

Adunarea la complexitati (de exempl: n + m) se folosestecand avem 2 valori si nu stim care este maximul. Inseamna”maximul dintre cele 2 valori”.

Caz mediu: Θ(n)Complexitate totala: O(n + m)

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

Page 114: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

this.elemente[this.len] = pthis.len = this.len + 1

end ifend subalgorithm

Cat este complexitatea algoritmului?

Avem caz favorabil: Θ(1) - adaugam o valoare la prima cheiesi nu trebuie realocat.Caz devaforabil: Θ(n + m), unde n este numarul total de cheisi m este numarul total de valori

Adunarea la complexitati (de exempl: n + m) se folosestecand avem 2 valori si nu stim care este maximul. Inseamna”maximul dintre cele 2 valori”.

Caz mediu: Θ(n)Complexitate totala: O(n + m)

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

Page 115: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

this.elemente[this.len] = pthis.len = this.len + 1

end ifend subalgorithm

Cat este complexitatea algoritmului?

Avem caz favorabil: Θ(1) - adaugam o valoare la prima cheiesi nu trebuie realocat.Caz devaforabil: Θ(n + m), unde n este numarul total de cheisi m este numarul total de valori

Adunarea la complexitati (de exempl: n + m) se folosestecand avem 2 valori si nu stim care este maximul. Inseamna”maximul dintre cele 2 valori”.

Caz mediu: Θ(n)Complexitate totala: O(n + m)

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

Page 116: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime ordonata pe Vector Dinamic

Daca vrem sa implementam o Multime ordonata folosindVectorul Dinamic, cum ar trebui sa reprezentam Multimeaordonata?

MultimeOrdonata:rel: Relatielen: ıntregcap: ıntregelemente: TElem[]

Vom trata Relatia ca o functie cu 2 parametrii:

rel(e1, e2) = 0, daca e1 == e2

rel(e1, e2) = −1, daca e1 < e2

rel(e1, e2) = 1, daca e1 > e2

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

Page 117: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime ordonata pe Vector Dinamic

Daca vrem sa implementam o Multime ordonata folosindVectorul Dinamic, cum ar trebui sa reprezentam Multimeaordonata?

MultimeOrdonata:rel: Relatielen: ıntregcap: ıntregelemente: TElem[]

Vom trata Relatia ca o functie cu 2 parametrii:

rel(e1, e2) = 0, daca e1 == e2

rel(e1, e2) = −1, daca e1 < e2

rel(e1, e2) = 1, daca e1 > e2

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

Page 118: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime ordonata pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia de adaugare?

Fiind Multime, elementele trebuie sa fie unice, deci ınainte dea adauga un element nou, trebuie sa verificam restulelementelor. Verificarea e suficienta sa o facem pana la pozitiaunde elementul ar trebui sa fie (elementele fiind ordonate).

Fiind o Multime ordonata, daca adaugam elementul, trebuiesa-l punem ın asa fel, ıncat elementele sa ramana ordonate(deci nu putem pune doar la capat).

Fiind Vector Dinamic, daca elementul trebuie adaugat, trebuiesa verificam daca mai avem loc liber, si daca nu, alocam unvector mai mare

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

Page 119: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime ordonata pe Vector Dinamic - adaugare

Ce ar trebui sa faca operatia de adaugare?

Fiind Multime, elementele trebuie sa fie unice, deci ınainte dea adauga un element nou, trebuie sa verificam restulelementelor. Verificarea e suficienta sa o facem pana la pozitiaunde elementul ar trebui sa fie (elementele fiind ordonate).

Fiind o Multime ordonata, daca adaugam elementul, trebuiesa-l punem ın asa fel, ıncat elementele sa ramana ordonate(deci nu putem pune doar la capat).

Fiind Vector Dinamic, daca elementul trebuie adaugat, trebuiesa verificam daca mai avem loc liber, si daca nu, alocam unvector mai mare

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

Page 120: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime ordonata pe Vector Dinamic - adaugare

subalgorithm adauga (e: TElem) is://prima data verificam daca mai exista elementuli, index: Integeri = 0while i < this.len AND this.rel(e, this.elemente[i]) == 1 execute

i = i + 1end while//Acum ori i = this.len (am iesit din vector) ori e = this.elemente[i]//ori e < this.elemente[i]if (i < this.len AND this.elemente[i] 6= e) OR i == this.len then

//trebuie adaugat//continuam pe pagina urmatoare

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

Page 121: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

if this.len == this.cap then//nu mai avem loc liber.@initializam vectNou, un vector cu this.cap*2 elementefor index = 0, index < this.len, 1 execute

vectNou[index] = this.elemente[index]end forthis.elemente = vectNou //ınlocuim vectorulthis.cap = this.cap * 2

end if//mutam elementele de la pozitia i la dreaptafor index = this.len-1, index > i-1, -1 execute

this.elemente[index+1] = this.elemente[index]end forthis.elemente[i] = ethis.len = this.len + 1

end ifend subalgorithm

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

Page 122: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime ordonata pe Vector Dinamic - adaugare

Cat este complexitatea pentru adauga?

Complexitatea depinde si de cautare

Caz favorabil: Θ(1) (gasesc elementul pe prima pozitie)Caz defavorabil: Θ(n) (elementul nu se gaseste si trebuieadagat)Caz mediu: Θ(n)Complexitatea totala: O(n)

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

Page 123: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

TAD Multime ordonata pe Vector Dinamic - adaugare

Cat este complexitatea pentru adauga?

Complexitatea depinde si de cautare

Caz favorabil: Θ(1) (gasesc elementul pe prima pozitie)Caz defavorabil: Θ(n) (elementul nu se gaseste si trebuieadagat)Caz mediu: Θ(n)Complexitatea totala: O(n)

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

Page 124: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Coada cu Prioritati pe Vector Dinamic

La Multime ordonata am vazut ca este necesar sa retinemelementele ordonate, si acest lucru este adevarat si pentrurestul containerelor ordonate care au iterator. Dar cum putemretine elementele pentru o Coada cu Prioritati?

Putem retine elementele ın ordinea ın care au fost adaugate

La adaugare pur si simplu punem elementul unde este cel maiusor de pusLa stergere trebuie sa cautam elementul cu prioritatea maximaLa element trebuie sa cautam elementul cu prioritateamaxima.

Putem retine elementele ordonate dupa prioritate

La adaugare trebuie sa punem elementul astfel ıncat structurasa ramana ordonata.La stergere stim ca elementul cu prioritatea maxima este la uncapat al cozii, nu trebuie sa cautam.La element stim ca elementul cu prioritatea maxima este la uncapat al cozii, nu trebuie sa cautam.

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

Page 125: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Coada cu Prioritati pe Vector Dinamic

La Multime ordonata am vazut ca este necesar sa retinemelementele ordonate, si acest lucru este adevarat si pentrurestul containerelor ordonate care au iterator. Dar cum putemretine elementele pentru o Coada cu Prioritati?

Putem retine elementele ın ordinea ın care au fost adaugate

La adaugare pur si simplu punem elementul unde este cel maiusor de pusLa stergere trebuie sa cautam elementul cu prioritatea maximaLa element trebuie sa cautam elementul cu prioritateamaxima.

Putem retine elementele ordonate dupa prioritate

La adaugare trebuie sa punem elementul astfel ıncat structurasa ramana ordonata.La stergere stim ca elementul cu prioritatea maxima este la uncapat al cozii, nu trebuie sa cautam.La element stim ca elementul cu prioritatea maxima este la uncapat al cozii, nu trebuie sa cautam.

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

Page 126: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

Coada cu Prioritati pe Vector Dinamic

La Multime ordonata am vazut ca este necesar sa retinemelementele ordonate, si acest lucru este adevarat si pentrurestul containerelor ordonate care au iterator. Dar cum putemretine elementele pentru o Coada cu Prioritati?

Putem retine elementele ın ordinea ın care au fost adaugate

La adaugare pur si simplu punem elementul unde este cel maiusor de pusLa stergere trebuie sa cautam elementul cu prioritatea maximaLa element trebuie sa cautam elementul cu prioritateamaxima.

Putem retine elementele ordonate dupa prioritate

La adaugare trebuie sa punem elementul astfel ıncat structurasa ramana ordonata.La stergere stim ca elementul cu prioritatea maxima este la uncapat al cozii, nu trebuie sa cautam.La element stim ca elementul cu prioritatea maxima este la uncapat al cozii, nu trebuie sa cautam.

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

Page 127: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Retinem elementele ın ordinea ın care au fost adaugate. Incare capat al Vectorului adaugam un element nou (numar maimare ınseamna element cu prioritate mai mare)?

Sageata verde arata capatul unde inseram.

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

Page 128: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Daca vectorul nu este ordonat, la stergere (si la operatiaelement) trebuie sa parcurgem vectorul sa gasim prioritateamaxima, indiferent de capatul ales pentru adaugare.

La adaugare e mai simplu sa punem un element la finalulvectorului dinamic, de aceea vom alege varianta a 2-a.

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

Page 129: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Unde punem elementul (Radu, 4)?

Complexitate: Θ(1)

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

Page 130: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Unde punem elementul (Radu, 4)?

Complexitate:

Θ(1)

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

Page 131: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Unde punem elementul (Radu, 4)?

Complexitate: Θ(1)

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

Page 132: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Care element va fi sters?

Trebuie sa stergem elementul cu prioritatea maxima, adica pe(Oana, 5).

Complexitate: Θ(n)

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

Page 133: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Care element va fi sters?

Trebuie sa stergem elementul cu prioritatea maxima, adica pe(Oana, 5).

Complexitate:

Θ(n)

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

Page 134: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Care element va fi sters?

Trebuie sa stergem elementul cu prioritatea maxima, adica pe(Oana, 5).

Complexitate: Θ(n)

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

Page 135: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic

Complexitatea este Θ(n) pentru ca pentru a gasi elementul cuprioritate maxima trebuie sa parcurgem tot vectorul. Nuexista caz favorabil, chiar daca sterg ultimul element si nu amde mutat niciun element, pentru a afla ca ultimul element areprioritatea maxima trebuie sa parcurgem tot vectorul.

Dupa stergere vom avea:

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

Page 136: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

Daca folosesc un Vector Dinamic Ordonat pot sa am 2variante (ordonat crescator dupa prioritate, sau ordonatdescrescator dupa prioritate):

Care varianta e mai buna?

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

Page 137: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

La adaugare trebuie sa inseram elementul astfel ıncat vectorulsa ramana ordonat, indiferent de varianta aleasa.

La stergere e mai simplu sa stergem de la finalul vectorului,deci vom alege prima varianta.

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

Page 138: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

Unde punem elementul (Radu, 4)?

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

Page 139: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

Unde punem elementul (Radu, 4)?

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

Page 140: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

Elementul (Radu, 4) poate fi pus si ın fata elementului (Raul,4) pentru ca au aceeasi prioritate.

Complexitate:

O(n) - aici avem caz favorabil, poate elementulde adaugat are complexitate mai mare decat ultimul element,si atunci pur si simplu ıl punem la final.

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

Page 141: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

Elementul (Radu, 4) poate fi pus si ın fata elementului (Raul,4) pentru ca au aceeasi prioritate.

Complexitate: O(n) - aici avem caz favorabil, poate elementulde adaugat are complexitate mai mare decat ultimul element,si atunci pur si simplu ıl punem la final.

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

Page 142: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

Care element va fi sters?

Stergem din nou elementul cu prioritatea maxima, dar de dataasta stim ca este la finalul vectorului.

Complexitate: Θ(1)

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

Page 143: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

Care element va fi sters?

Stergem din nou elementul cu prioritatea maxima, dar de dataasta stim ca este la finalul vectorului.

Complexitate:

Θ(1)

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

Page 144: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Reprezentare pe Vector Dinamic Ordonat

Care element va fi sters?

Stergem din nou elementul cu prioritatea maxima, dar de dataasta stim ca este la finalul vectorului.

Complexitate: Θ(1)

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

Page 145: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Vector Dinamic - Rezumat

Sa vedem complexitatea operatilor pentru cele 2 variante dereprezentare pe vector dinamic (ordonat sau neordonat)

Operatie VD Neordonat VD Ordonatadauga Θ(1) O(n)

sterge Θ(n) Θ(1)

element Θ(n) Θ(1)

Pe baza complexitatilor putem conclude ca este mai binesa retinem elementele ıntr-o structura ordonata.

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

Page 146: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE S˘I STRUCTURI DE DATE CURS 4 Lect. dr. Onet˘ - Marian Zsuzsanna Facultatea de Matematic

CP - Rezumat

Am vazut ca putem sa implementam operatia de adaugareavand complexitate O(n) si stergerea ın Θ(1).

Acest lucru ınseamna ca daca adaugam n elemente ıntr-ocoada cu prioritati dupa care stergem n elemente,complexitatea totala a operatiilor va fi: O(n2) ( n * O(n) + n* Θ(1)).

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