Sunteți pe pagina 1din 48

Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Structuri de date si algoritmi


Curs 1

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

Examen scris - in sesiunea din vara


Laborator:
nota laborator = 0.35 * Test1 + 0.65*Test2

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

Curs seria A: Raluca Brehar


Sala 6 str. G. Baritiu
Tel. 0264-401484
Raluca.Brehar@cs.utcluj.ro

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

Kleinberg, Tardos [KT]: Algorithm Design, Addison-Wesley, 427


pages, 2005.
Resursa buna pentru tehnici de dezvoltare a algoritmilor, analiza
algoritmilor, algoritmi pe grafuri, P vs. NP; pseudocod
http://www.cs.sjtu.edu.cn/ jiangli/teach-
ing/CS222/files/materials/Algorithm%20Design.pdf
Cormen, Leiserson, Rivest, (Stein) [CLR, CLRS]: Introduction to
Algorithms. MIT Press / McGraw Hill, (2nd edition),1028 pages,
1990 (2002)
BIBLIA de Algoritmi Fundamentali (anul II), scrisa pentru toate
nivelele, cu capitole introductive, dar si detaliate (in a doua parte a
cartii); pseudocod

9/ 48
9 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Bibliografie extinsa

Preiss: Data Structures and Algorithms with object-Oriented Design


Patterns in C++, John Wiley and Sons, 660 pages, 1999.
Knuth: The Art of Computer Programing, Addison Wesley, 3 volume,
multiple editii.
Skiena: The Algorithm Design Manual
http://sist.sysu.edu.cn/ isslxm/DSA/textbook/Skiena.-
.TheAlgorithmDesignManual.pdf
Recomandata de recruiterii Google, DAR!! nu suficient de teoretica

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

Familiarizarea cu structuri de date fundamentale si algoritmi care


opereaza pe acestea
Familiarizarea cu diferite proprietati ale structurilor de date si
algoritmilor
Dezvoltarea capacitatii de a analiza comparativ algoritmii
(proprietati, timp de rulare, memorie folosita, etc)
Dezvoltarea capacitatii de a identifica structuri de date si algoritmi
potriviti, atunci cand acestia sunt disponibili
Dezvoltarea capacitatii de a proiecta algoritmi si structuri de date
noi, atunci cand nu exista disponibile

13/ 48
13 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Continut Curs

1. Introducere. Algoritm. Analiza 8.Structuri de date pentru multimi


eficientei. Tip de data abstracta, disjuncte
structura de date. 9. Grafuri: reprezentare; definitii,
2. Liste. Stive. Cozi proprietati, problematici, traversari
3. Arbori. Arbori binari. Arbori 10.Tehnici de dezvoltare a
binari de cautare algoritmilor / generale de cautare:
4. Arbori binari de cautare backtracking, branch and bound,
echilibrati: AVL, arbori perfect greedy, divide et impera,
echilibrati programare dinamica
5. Arbori multicai de cautare 11. Sortarea
echilibrati B-trees
6. Tabele de dispersie
7. Structuri de date pentru cozi de
prioritati (Heap).
14/ 48
14 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Model de rezolvare

15/ 48
15 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Rezolvarea unei probleme: exemplu

Ordonati crescator un sir Provocari in construirea modelului


De exemplu: sirul 7, 5, 4, 10, 5 Cum modelam obiectele reale
ca si entitati matematice ?
Rezolvarea unei probleme Definirea multimii de operatii
Model exact al solutiilor valide. care manipuleaza entitatile
Gasirea unui astfel de model - Modalitatea de stocare in
50% problema rezolvata memorie (cum le agregam,
Experienta, cunostinte de cum le stocam propriu-zis) -
matematica, inginerie STRUCTURI DE DATE!
software, algoritmica, etc. Algoritmii care realizeaza
Dupa ce dispunem de modelul operatiile - ALGORITMI!
matematic, putem specifica o
solutie in termenii acelui model
16/ 48
16 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Rezolvarea unei probleme: exemplu si definitii


Ordonati crescator un sir
Problema:
Intrare: O secventa (sir) de n numere < a1 , a2 , . . . , an >
0 0 0 0 0
Iesire: O permutare a numerelor < a1 , a2 , . . . an > a.i.ai ≤ aj , i < j
Instanta: sirul < 7, 5, 4, 10, 5 >
Algoritmi: sortare prin selectie, sortare prin inserare, sortare rapida
(Quick sort), etc.

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)

Proiectarea algoritmului: discutie robot tour optimization

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

De tinut minte ...

Esenta unui algoritm este o idee!


Este important ca algoritmul sa fie exprimat clar! (pseudocod, limbaj
natural, limbaj de programare)
Corectitudinea trebuie demonstrata! Incorectitudinea -
contra-exemplu (verificabilitate, simplitate)
”Program testing can be used to show the presence of bugs, but never
to show their absence!” (E.W. Dijkstra)
Contra-exemple: dimensiune mica, exhaustiv, slabiciuni -¿ egalitate,
extreme

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

Stabilirea cantitatilor de resurse necesare rularii algoritmului (de


regula in functie de dimensiunea intrarii).
Resurse:
timp
memorie (spatiu)
numar de accese la memoria secundara
numar de operatii aritmetice de baza
traficul de retea
Formal, se defineste timpul de rulare al unui algoritm pe o intrare
particulara ca fiind numarul de operatii de baza efectuate de algoritm
pe acea intrare.
Maniera independenta de masina si limbaj
Unelte:
Modelul de calcul RAM (Random Access Machine)
Analiza asimptotica a cazului defavorabil
22/ 48
22 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Modelul RAM de calcul

Modelul RAM aplicat pe TOATE


Orice operatie simpla (+, -, *,
instantele posibile (e.g. sortare)
=, if, apel) se executa intr-o
unitate de timp
Buclele si sub-rutinele nu sunt
operatii simple (compozitie de
mai multe operatii simple,
dependente de nr. de repetitii)
Accesul la memorie se executa
intr-o unitate de timp
(memorie nelimitata, nu se
face diferenta intre cache si
disc) Fig.: Imagine preluata din S. Skiena - The Algorithm Design Manual

23/ 48
23 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

O (BIG OH)

Extrem de greu de specificat


functiile de complexitate
exact!
Prea multe iregularitati
(”spykes/bumps”)
Cautarea binara mai rapida pe
vectori de dimensiune 2k − 1
Prea multe detalii pentru a
putea fi specificate exact Fig.: Imagine preluata din S. Skiena - The Algorithm Design Manual

(detalii neinteresante de cod)

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

Analiza Algoritmilor - Exemple

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

Timpii de rulare (rotunjiti in sus) pentru diferite clase de complexitate,


obtinuti pe un procesor care executa 1 mil. de operatii/sec:

Fig.: Imaginea a fost preluata din Kleinberg, Tardos: Algorithm Design

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

Tip de data abstracta (ADT) vs structuri de date (DS)

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

Structuri de date liniare

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

Structuri de date liniare

Lista
1 Definitie: lista este o secventa liniara cu un numar arbitrar de

elemente (posibil duplicate), avand urmatoarele operatii


fundamentale:
insert(x): adauga element x la inceputul listei (poate si la sfarsit, in
ordine, inainte/dupa o anumita cheie)
Intrare: element (sau cheie, cheie dupa, etc);
Iesire: nimic
delete(x): Sterge element x (poate si primul, ultimul, cheie); eroare
daca lista e goala
Intrare: pointer catre elementul de sters (cheia, nimic);
Iesire: nimic
search(k): cauta element care are cheia k
Intrare: cheia de cautat;
Iesire: pointer catre element sau NULL daca nu s-a gasit

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

Lista simplu inlantuita – model informal

Avem un nod mai important capul listei (locomotiva)


De la capul listei se poate naviga din nod in nod (in vagoane) pana
ajungem la sfarsit.
La adaugarea si stergerea elementelor in lista e ca si cum am adauga
un vagon la tren. Vagonul trebuie conectat cu vagonul anterior si cu
cel precedent !
Cum marcam ca am ajuns dupa ultimul vagon - coada listei ?
folosim NIL (null).
32/ 48
32 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Lista simplu inlantuita – model formal

Inlantuire intr-o singura directie


Definirea unui element al listei:
t y p e d e f s t r u c t node {
i n t key ;
s t r u c t node ∗ n e x t ;
} NodeT ;

Definire variabile care sa marcheze inceputul si sfarsitul listei:


i n t count ; // o p t i o n a l
NodeT ∗ f i r s t ;
NodeT ∗ l a s t ; // o p t i o n a l

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

Lista simplu inlantuita – insert la inceput

Optiuni Trebuie creat intai elementul de


1 la inceput inserat.
2 la sfarsit Caz 1: adaugare la inceput, el
3 inainte/dupa o cheie va fi noul first
4 la pozitia k Caz 2: adaugare la sfarsit
(noul last, daca e cazul)
5 ordonata
Caz 3, 4 & 5: cautare loc
refacere legaturi

34/ 48
34 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Lista simplu inlantuita – insert la inceput

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 simplu inlantuita – insert la sfarsit

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

Lista simplu inlantuita – insert dupa un nod care are cheia


givenKey

Se cauta nodul care contine cheia givenKey :


NodeT ∗q ;
q = first ;
w h i l e ( q!=NULL) {
i f ( q−>k e y == g i v e n K e y ) b r e a k ;
q = q−>n e x t ;
}

Se insereaza nodul de pointer p si se ajusteaza legaturile.


p−>n e x t = q−>n e x t ;
q−>n e x t = k e y ;

37/ 48
37 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Lista simplu inlantuita – delete primul element

Actualizam nodul first ca sa Stergem efectiv nodul.


pointeze catre nodul urmator lui.

Ce se intampla daca lista contine doar 1 element inainte de stergere?

38/ 48
38 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Lista simplu inlantuita – delete ultimul element

1 Actualizeaza last sa pointeze


la nodul anterior lui. E nevoie
de o parcurgere a listei !
2 Se modifica pointerul next al
noului element last sa pointeze
la NULL.
3 Se sterge fizic vechiul element
last.

Ce se intampla daca lista contine doar 1 element inainte de stergere?

39/ 48
39 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Lista simplu inlantuita – delete caz general

Elementul apare intre doua alte elemente existente! Nu se actualizeaza


first si last.

1 Actualizeaza campul next al elementului anterior sa pointeze catre


elementul urmator al elementului care se sterge necesita parcurgere!

2 Se sterge fizic elementul.

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

Vector static - exemplu insert

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

Vector static - exemplu delete

delete(12)

44/ 48
44 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Comparatie vector static vs lista simplu inlantuita

Operatie Lista simplu inlantuita, vector static


cu first si last
insert-first O((1) O(n) – trebuie mutate el-
ementele
insert-last O(1) O(1)
insert in in- O(n) O(n)
terior
cautare O(n) O(n)
dupa cheie

45/ 48
45 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Vector dinamic

Dynamic array, growable array,


resizable array, dynamic table,
mutable array, or array list
Capacitate variabila:
Cand size = capacity, se aloca
un vector nou, de capacitate
a*capacity, se copiaza
elementele din locatia veche in
cea noua

46/ 48
46 / 48
Organizare Echipa Bibliografie Obiective Model de rezolvare Analiza Algoritmilor Structuri de date Lista - secventiala

Vector dinamic - insert

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

1 Discutie - viziunea studentilor


2 Cum scriem pseudocod – exemple
3 Analiza eficientiei algoritmilor – exemple
4 Implementare pseudocod si cod C a unei liste simplu inlantuite.

48/ 48
48 / 48

S-ar putea să vă placă și