Documente Academic
Documente Profesional
Documente Cultură
Raluca Brehar
raluca.brehar@cs.utcluj.ro
1/ 48
1 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Agenda
1 Organizare
2 Echipa
3 Bibliografie
4 Obiective
5 Model de rezolvare
6 Analiza Algoritmilor
7 Structuri de date
8 Lista - secventiala
2/ 48
2 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Organizare
3/ 48
3 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Activitati
1 Cursuri
2h prezentare teoretica
1h exercitii practice la tabla
Teste scurte neanunţate - quiz (5-10 min) ı̂n timpul cursului !
Participare, implicare prin intrebări, exerciti̧i practice ı̂n echipe de lucru
online
2 Sesiuni de laborator
Lucrarea de laborator parcursă ı̂naintea sesiunii de laborator
Sarcini:
Obligatorii (depunctare!)
Aditionale (optionale, de fixare a cunostintelor)
Cadrul didactic de la laborator este acolo in primul rand sa va ajute, in
al doilea rand sa va evalueze
4/ 48
4 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Evaluare
Nota catalog = 60% examen scris + 30% laborator + 10% teste curs
5/ 48
5 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Echipa
6/ 48
6 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Echipa
Pagina curs
Moodle: https://moodle.cs.utcluj.ro/
Laborator:
Robert Varga (grupa 1, grupa 2/1, grupa 3/1)
Ana Maria Naneş (grupa 2/2, grupa 3/2)
Iulia Costin (grupa 4)
Dan Domniţa (grupa 5)
7/ 48
7 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Bibliografie
8/ 48
8 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Bibliografie Recomandata
9/ 48
9 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Bibliografie extinsa
10/ 48
10 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Resurse adiţionale
https://www.geeksforgeeks.org/
Vizualizare, unealta interactiva: visualgo.net
http://www.algolist.net/Data structures/
coursera.org Data structures: Measuring and Optimizing Performance
(U.C. San Diego)
11/ 48
11 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Obiective
12/ 48
12 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Obiective
13/ 48
13 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Continut Curs
Model de rezolvare
15/ 48
15 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Definitii
Problema computationala: O specificare in termeni generali a
intrarilor si iesirilor si a relatiei dorite intre acestea.
Instanta de problema: O colectie particulara de intrare pentru
problema data.
Algoritm: O metoda de rezolvare a unei probleme care poate fi
implementata de un calculator. 17/ 48
17 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Un algoritm ...
Trebuie sa fie:
corect
eficient
usor de implementat
”The best programs are written so that computing machines can perform
them quickly and so that human beings can understand them clearly. A
programmer is ideally an essayist who works with traditional aesthetic and
literary forms as well as mathematical concepts, to communicate the way
that an algorithm works and to convince a reader that the results will be
correct. (Knuth)
18/ 48
18 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Exemplu de algoritm:
Robot Tour Optimization
Intrare: o multime S de n puncte Iesire: care este cel mai scurt tur
din plan. (ciclu) care viziteaza fiecare punct
din multimea S?
Idei
Cel mai apropiat vecin
Cea mai apropiata pereche
Cautare exhaustiva
19/ 48
19 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
20/ 48
20 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Analiza Algoritmilor
21/ 48
21 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Analiza Algoritmilor
23/ 48
23 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
O (BIG OH)
Upper Bound: O
Se folosesc limite
superioare/inferioare Lower Bound: Ω
Tight Bound: Θ
24/ 48
24 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
O(1)
O(n)
O(n2 )
O(2n )
O(log n)
25/ 48
25 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
De la teorie la practica
26/ 48
26 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Structuri de date
27/ 48
27 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
ADT
Model matematic pentru tipuri de date: descrie un comportament
(semantica)
DS
Reprezentari concrete ale datelor: descrie implementarea
Exemplu
Lista – o colectie de elemente, posibil duplicate (container); specifica
o multime de operatii, ca si functionalitate (i.e. ce fac)
O lista poate fi implementata fie folosind un sir (array), fie o lista
simplu/dublu inlantuita
particular - java.util.ArrayList, java.util.LinkedList, sau biblioteca
std::list (C++, lista dublu inlantuita la baza)
28/ 48
28 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Operatii
1 Adaugarea unui element in structura:
Alocarea dinamica a memoriei pentru noul element
Initializarea noului element alocat
Legarea elementului in structura
2 Cautarea unui element
Stergerea unui element din structura:
Stergerea logica – eliminarea elementului prin modificarea adreselor de
legatura
Stergerea fizica – eliberarea memoriei ocupate de elementul respectiv.
3 Parcurgerea (traversarea) elementelor structurii
29/ 48
29 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Lista
1 Definitie: lista este o secventa liniara cu un numar arbitrar de
30/ 48
30 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Lista
Operatii aditionale
size(): returneaza numarul de elemente din lista
Intrare: nimic; Iesire: intreg
isEmpty(): returneaza valoare booleana care semnaleaza daca lista e
goala
Intrare: nimic; Iesire: boolean
first(): returneaza, fara a sterge, primul element din lista; eroare daca
lista este goala
Intrare: none; Iesire: element
last(): returneaza, fara a sterge, ultimul element din lista; eroare
daca lista este goala
Intrare: nimic; Iesire: element
prev(x), next(x): returneza elementul care precede/sucede elementul
x tail(): returneaza restul listei, fara primul element
31/ 48
createEmpty(): creeaza o lista vida. 31 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
createEmpty()
f i r s t = NULL ;
l a s t = NULL ;
33/ 48
33 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
34/ 48
34 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Lista e vida:
NodeT ∗p = ( NodeT ∗ ) m a l l o c ( s i z e o f ( NodeT ) ) ;
p−>k e y = Key ;
p−>n e x t = NULL ;
i f ( f i r s t == NULL) {
fist = p;
last = p;
}
lista nu e vida:
i f ( f i r s t != NULL) {
p−>n e x t = f i r s t ;
fist = p;
}
35/ 48
35 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Lista e vida:
NodeT ∗p = ( NodeT ∗ ) m a l l o c ( s i z e o f ( NodeT ) ) ;
p−>k e y = Key ;
p−>n e x t = NULL ;
i f ( f i r s t == NULL) {
fist = p;
last = p;
}
lista nu e vida:
i f ( l a s t != NULL) {
p−>n e x t = NULL ;
l a s t −>n e x t = p ;
last = p;
}
36/ 48
36 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
37/ 48
37 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
38/ 48
38 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
39/ 48
39 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
40/ 48
40 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Lista - secventiala
41/ 48
41 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Vector static
1 Structura:
vector: int myList[CAPACITY]
dimensiune: int size
2 Operatii:
search(k)
insert-first(x), insert-last(x), insert-before-k(x, k), insert-after-k(x, k),
insert-ord(x)
delete-first(), delete-last(), delete(x)
size(), capacity(),etc.
42/ 48
42 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
insert-first(23)
1 Se muta toate elementele aflate dupa pozitia de inserare catre
dreapta
2 Se pune elementul x pe pozitia pos
3 Creste size: size++
4 Ce se intampla daca size = CAPACITY
43/ 48
43 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
delete(12)
44/ 48
44 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
45/ 48
45 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Vector dinamic
46/ 48
46 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
TABLE-INSERT(T, x)
if T.capacity == 0
allocate T.table with 1 slot
T.capacity = 1
if T.capacity == T.size
allocate new_table with a*T.capacity slots
insert all from T.table to new_table
free T.table
T.table = new_table
T.capacity = a*T.capacity
insert x into T.table
T.size = T.size + 1
47/ 48
47 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala
Partea aplicativa
48/ 48
48 / 48