PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE...
Transcript of PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs04.pdf · 2020-01-13 · PROGRAMARE...
![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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/1.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/2.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/4.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/5.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/6.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/7.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/8.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/9.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/10.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/11.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/12.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/13.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/14.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/15.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/16.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/17.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/18.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/19.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/20.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/21.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/22.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/23.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/24.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/25.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/26.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/27.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/28.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/29.jpg)
//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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/30.jpg)
//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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/31.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/32.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/33.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/34.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/35.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/36.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/37.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/38.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/39.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/40.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/41.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/42.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/43.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/44.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/45.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/46.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/47.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/48.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/49.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/50.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/51.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/52.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/53.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/54.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/55.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/56.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/57.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/58.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/59.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/60.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/61.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/62.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/63.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/64.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/65.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/66.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/67.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/68.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/69.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/70.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/71.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/72.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/73.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/74.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/75.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/76.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/77.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/78.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/79.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/80.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/81.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/82.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/83.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/84.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/85.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/86.jpg)
//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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/87.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/88.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/89.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/90.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/91.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/92.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/93.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/94.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/95.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/96.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/97.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/98.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/99.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/100.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/101.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/102.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/103.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/104.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/105.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/106.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/107.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/108.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/109.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/110.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/111.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/112.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/113.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/114.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/115.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/116.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/117.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/118.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/119.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/120.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/121.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/122.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/123.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/124.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/125.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/126.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/127.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/128.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/129.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/130.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/131.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/132.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/133.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/134.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/135.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/136.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/137.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/138.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/139.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/140.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/141.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/142.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/143.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/144.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/145.jpg)
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](https://reader030.fdocuments.co/reader030/viewer/2022040213/5ea48370eedaf170b678e810/html5/thumbnails/146.jpg)
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