Tablouri (continuare)

Documente similare
Microsoft Word - CarteC.doc

Laborator 3

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

proiectarea bazelor de date

Diapositive 1

tehnologii web

Slide 1

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior Universitatea Babeş-Bolyai Cluj-Napoca 1.2 Facultatea Matematică şi Info

Object Oriented Programming

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

09. Informatica 2 - MM 1

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Curs 6 Gestiunea memoriei in C++ Alocare dinamica. Destructor. RAII. Rule of three. Tratarea excepțiilor exception safe code Moștenire Curs 5 Template

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Top

Procesarea de imagini folosind programarea paralela. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte l

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

E_d_Informatica_sp_SN_2014_bar_10_LRO

Slide 1

E_d_Informatica_sp_MI_2015_bar_02_LRO

PROGRAMARE ORIENTATA PE OBIECTE

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Unitatea: Școala Gimnazială Disciplina: Informatică și TIC Programa școlară aprobată cu OMEN nr.3393 din Profesor: prof. Clasa: a V-a A, B

..MINISTERUL EDUCAŢIEI NAȚIONALE ŞI CERCETARII STIINTIFICE UNIVERSITATEA DE VEST DIN TIMIȘOARA.I CENTRUL DE DEZVOLTARE ACADEMICĂ. FIȘA DISCIPLINEI 1.

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Paradigme de Programare

SUBPROGRAME

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

L7

Microsoft Word - CarteC.doc

PowerPoint-Präsentation

UNIVERSITATEA DE STAT "ALECU RUSSO"

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Paradigme de programare

Proiectarea Sistemelor Software Complexe

PPSD

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Microsoft Word - lab4.doc

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Microsoft Word - cap1p4.doc

PowerPoint Presentation

Limbaje de Programare Curs 5 – Siruri de caractere

Metode de programare Proiectarea algoritmilor

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Ingineria Sistemelor de Programare

Microsoft Word - O problema cu bits.doc

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Programarea şi utilizarea calculatoarelor

Grafuri - Concepte de baza. Tipuri de grafuri. Modalitati de reprezentare

Programarea şi utilizarea calculatoarelor

-

PowerPoint Presentation

Algebra si Geometri pentru Computer Science

Microsoft Word - 2 Filtre neliniare.doc

Microsoft Word - Curs_07.doc

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Microsoft PowerPoint - Prezentarea_programelor_de_studii_de_licenta_2019

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

CURS

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Slide 1

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE ȘI ALE MEDIULUI CATEDRA

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

LUMINIŢA SCRIPCARIU

CASA CORPULUI DIDACTIC BRAILA PROGRAM DE FORMARE INFORMATICA SI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: TIMOFTI V. AFRODITA COLEGIUL

Microsoft Word - PCLP2_Curs_4_2019.doc

A TANTÁRGY ADATLAPJA

Microsoft Word - Curs 7 - JavaScript.doc

PowerPoint Presentation

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C

I

Slide 1

Microsoft Word - Algoritmi genetici.docx

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

..MINISTERUL EDUCAŢIEI NAȚIONALE ŞI CERCETARII STIINTIFICE UNIVERSITATEA DE VEST DIN TIMIȘOARA.I CENTRUL DE DEZVOLTARE ACADEMICĂ. FIȘA DISCIPLINEI 1.

A TANTÁRGY ADATLAPJA

Spatii vectoriale

Microsoft Word - 2 ES RO.doc

ALGORITHMICS

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Slide 1

Evaluarea unităţilor de dializă publice si private

Microsoft Word - Excel_3.DOC

Microsoft Word - Curs_09.doc

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Transcriere:

Vector Dinamic DYNAMIC ARRAY Observații 1. Un tablou este static: nu pot fi inserate sau şterse celule. 2. Vector - tablou unidimensional 3. Reprezentarea vectorilor este secvenţială, adică elementele sunt memorate în locaţii succesive de memorie Detaliu de implementare: spațiul de memorare poate fi alocat static sau dinamic (în timpul execuţiei programului). Accesul la elemente este direct (prin intermediul indicilor) complexitate-timp (1). 4. Tablourile sunt des folosite ȋn programare și pentru reprezentarea altor structuri de date. 5. Există aşa numitele tablouri dinamice - vectori dinamici ("dynamic arrays"), care sunt tablouri unidimensionale cu caracter dinamic, a căror lungime se modifică în timp și în care se pot insera, respectiv şterge elemente. spațiul de memorare alocat tabloului crește automat în momentul în care nu mai există spațiu suficient pentru inserarea unui nou element alocare dinamică 6. Alegerea unei reprezentări bazate pe alocarea dinamică a memoriei prezintă avantajul amânării cunoaşterii mărimii efective a vectorului până la momentul execuției. Un tablou alocat static impune specificarea mărimii tabloului ca o constantă. Caracteristici 1. Vectorul dinamic - reprezentare: a. capacitatea sa (cp) numărul de locaţii alocat vectorului; b. dimensiunea sa (n) lungimea efectivă a vectorului; c. elementele vectorului ( e = e, 1 e2,..., en ). ȋn C/C++, e este adresa la care se memorează primul element al vectorului 2. Dacă la adăugarea unui element în vector se depăşeşte capacitatea vectorului, atunci se măreşte capacitatea acestuia (de obicei se dublează, pentru generalitate se poate considera un anumit raport de creştere a capacităţii faţă de dimensiunea vectorului). Ca detaliu de implementare, în cazul în care spaţiul de memorie necesar stocării elementelor vectorului se alocă dinamic, atunci se va face o realocare a acestui spaţiu (la noua capacitate), se copiază elementele din vechiul spaţiu în noul spaţiu, se adaugă/inserează elementul, după care se dealocă vechiul spaţiu. Cu toate că această operaţie de redimensionare/realocare este costisitoare ( (n) ), operaţia de adăugare a unui element la sfârşitul vectorului are, totuşi, complexitatea-timp amortizată (1) 3. Implementări ȋn bibliotecile existente ȋn diferite limbaje Java clasa Vector o implementată ȋncȃt să funcționeze cu acces concurent o dacă nu se dorește acces concurent ArrayList (lista reprezentată secvențial pe tablou)

STL din C++ - clasa Vector o Considerat un container de tip secvență (acces prin rang și poziție) o implementat ca un vector dinamic 4. VectorDinamic - reprezentare secvențială a containerului Lista. 5. VectorDinamic se consideră potrivit pentru: Accesare element de pe o anumită poziție (1) (complexitate-timp). Iterare elemente ȋn orice ordine timp liniar (n) Adăugare element la sfȃrșit complexitate-timp amortizată (1) Ștergere element de la sfȃrșit - timp constant (1) În continuare, pentru un număr natural n folosim notaţia [ n ] = {1,2,.., n}. De asemenea, vom considera următoarele: adăugarea şi ştergerea elementelor se poate face la atât la sfârşitul vectorului, cât şi pe orice poziţie în vector. la redimensionarea capacităţii vectorului, pp. că aceasta se dublează. Deşi este unanim acceptat faptul că reprezentarea tablourilor unidimensionale este secvențială, se poate abstractiza tipul de dată VectorDinamic. TAD VectorDinamic domeniu V={v v = ( cp, n, e1e2... en ), cp, n N, n cp, ei sunt de tip TElement } operaţii (interfaţa) creează(v, cp) constructor - se creează un vector cu lungime 0, având capacitatea cp pre: cp Natural post: v V, n=0, cp=cp @ aruncă excepție dacă cp e negativ dim(v) post: dim = lungimea vectorului v (numărul de elemente) Natural element(v, i, e), i Natural, i [ post: e TElement, e=ei (elementul de pe poziţia i din vectorul v) @ aruncă excepție dacă i e ȋn afara intervalului [ modifică(v, i, e)

, i Natural, i [, e TElement post: v V, v.ei=e (al i-lea element din v devine e) @ aruncă excepție dacă i e ȋn afara intervalului [ adaugasfarsit(v, e) se adaugă la sfârşitul vectorului elementul e; dacă n=cp atunci creşte capacitatea pre: v V, e TElement post: v V, v '. n = n + 1 ( v. cp = n) ( v'. cp = cp * 2, v'. v' = e) adaugapozitie(v, i, e) se adaugă pe poziţia i elementul e; dacă n=cp atunci creşte capacitatea pre: v V, i Natural, i [ + 1, e TElement post: v V, v '. n = n + 1 ( v. cp = n) ( v'. cp = cp * 2, v'. j] = j 1] j = v'. n, v'. n 1,..., i + 1, v'. i] = e) @ aruncă excepție dacă i e ȋn afara intervalului [ stergesfarsit(v, e) se şterge elementul de la sfârşitul vectorului pre: v V, n 0 post: e TElement, e =, v V, v '. n = n 1 ştergepozitie(v, i, e) se şterge pe poziţia i a vectorului iterator(v, i) pre: v V, n 0, i Natural, i [ post: e TElement, e = i], v V, v '. n = n 1, v '. j] = j + 1] j = i, i + 1,..., v'. n @ aruncă excepție dacă i e ȋn afara intervalului [ se creează un iterator pe vectorul v distruge(v) post: i I, i este iterator pe vectorul v destructor post: vectorul v a fost 'distrus' (spaţiul de memorie alocat a fost eliberat)...alte operaţii...

Observaţii 1. Complexitatea operațiilor unui TAD poate fi determinată după ce s-au luat decizii legate de reprezentarea și modul de implementare a TAD-ului. Considerȃnd reprezentarea secvențială a unui vector dinamic, operațiile de bază din interfața TAD VectorDinamic au complexitățile: dim complexitate-timp (1) element complexitate-timp (1) modifică complexitate-timp (1) adaugasfarsit complexitate-timp amortizată (1) adaugapozitie complexitate-timp O (n) stergesfarsit complexitate-timp (1)!!! dacă se folosește redimensionare, atunci complexitatea-timp amortizată e (1) ştergepozitie complexitate-timp O (n) iterator complexitate-timp (1) 2. Deoarece se permite modificarea capacității vectorului, se impune pentru implementare folosirea alocării dinamice a memoriei. 3. După cum menţionam anterior, este posibil ca la redimensionarea capacităţii vectorului să se folosească un raport de creştere RC (a capacităţii faţă de numărul de elemente din vector) - în specificaţia anterioară am folosit RC = 2. 4. Pentru o gestionare mai eficientă a spaţiului de memorie alocat vectorului, pentru a evita situaţii în care numărul de elemente efectiv memorate în vector este mult mai mic decât capacitatea de memorare a acestuia, se poate folosi un raport maxim RM, care asigură faptul că nu se ajunge la o creştere a capacităţii prea mare faţă de numărul de elemente. Ceea ce înseamnă că la operaţia de ştergere, în cazul în care cp RM, atunci se va micşora capacitatea vectorului (ceea ce va implica realocare copiere elemente...) n 5. Spre deosebire de operaţia adaugasfarsit, a cărei complexitate-timp defavorabilă este (n), dar totuşi complexitatea-timp amortizată este (1), operaţia adaugapozitie are complexitatea-timp amortizată O (n) (ca şi cea defavorabilă). 6. În interfaţa TAD VectorDinamic pot fi adăugate şi alte operaţii, spre exemplu: verificarea dacă vectorul este sau nu vid (fără elemente), căutarea unui element în vector şi returnarea poziţiei pe care apare, transformarea ȋn string (tostring), transformarea ȋn vector (toarray) etc. Elementele unui vector dinamic pot fi tipărite în două moduri:

1. Prin iterator, ca orice container. 2. Folosind accesul la elemente prin indici, datorită reprezentării secvenţiale. Ca urmare, tipărirea se poate face 1. subalgoritmul tipărire(v) este {complexitate-timp (n) } {pre: v este un vector dinamic} {post: se tipăresc elementele vectorului} iterator(v,i) {vectorul îşi construieşte iteratorul} CâtTimp valid(i) execută {cât timp iteratorul e valid} element(i, e) {se obţine elementul curent din iteraţie} @ tipăreşte e {se tipăreşte elementul curent} următor(i) {se deplasează iteratorul} SfCâtTimp sftipărire Ţinând cont de reprezentarea secvenţială, reprezentarea iteratorului şi implementarea operaţiilor iteratorului pe vector sunt similare celor discutate în Seminarul 1 (colecţia reprezentată ca un vector de elemente). 2. subalgoritmul tipărire(v) este {complexitate-timp (n) } {pre: v este un vector dinamic} {post: se tipăresc elementele vectorului} pentru i 1,dim(v) execută element(v, i, e) {se obţine elementul de poziţia} @ tipăreşte e {se tipăreşte elementul curent} sfpentru sftipărire Reprezentare secvențială caracteristici inserări, ștergeri O (n) gestionare ineficientă a spațiului de memorare accesul la elemente este direct (1) adăugare la sfȃrșit (1) amortizat ștergere la sfȃrșit (1) (amortizat, dacă se face redimensionare)