Sunteți pe pagina 1din 27

Structuri de date si tehnici de

elaborare a algoritmilor
Conf. dr. Smaranda Belciug
sbelciug@inf.ucv.ro
Privire de ansamblu asupra cursului
—  Ce vom studia la acest curs?
—  Programare si rezolvare de probleme, cu aplicatii

—  Algoritm: metoda de a rezolva o problema

—  Structura de date: metoda de a stoca informatii

Topic Algoritmi si structuri de date


Algoritmi clasici Backtracking, Divide et Impera, Greedy, Metoda
programarii dinamice
Tipuri de date Lista simplu inlantuita, lista dublu inlantuita, stiva,
coada,
Sortari SelectionSort, BubbleSort, InsertionSort,
ShellSort, Mergesort, Quicksort
Grafuri BFS, DFS
Arbori Arbori binari
2 Cautari Hash table
De ce sa studiem algoritmi?
—  Impactul lor este imens si atinge multe domenii
—  Internet. Cautari Web, rutare de pachete, file sharing..

—  Biologie. Proiectul genomului uman..

—  Computere. Design de circuite, compilatoare..

—  Grafica pe calculator. Filme, jocuri video, realitate virtuala..

—  Securitate. Telefoane mobile, e-commerce, vot electronic

—  Multimedia. MP3, JPG, DivX, HDTV..

—  Retele sociale. Recomandari, news feeds, reclame..

—  Fizica. Simularea coliziunii particulelor..

—  Medicina. Diagnostic automat..

—  ...

3
De ce sa studiem algoritmi?
—  Radacini vechi.. oportunitati noi..

—  Euclid

—  Romanii

—  Caterina de Medici

—  Turing

—  Noi algoritmi dezvoltati zilnic!

4
De ce sa studiem algoritmi?
—  Pentru stimularea intelectuala

—  “An algorithm must be seen to be believed” - Donald Knuth

—  “Folosire: aplica samponul pe parul ud. Maseaza, apoi clateste.


Repeta procedura. Un algoritm tipic de spalat parul care nu are
conditie de oprire – greseala programatorilor atunci cand scriu o bucla
infinita” - Anonim

5
De ce sa studiem algoritmi?
—  “I will, in fact, claim that the difference between a bad

programmer and a good one is whether he considers his code or


his data structures more important. Bad programmers worry
about the code. Good programmers worry about data structures
and their relationships.” – Linus Torvalds

6
De ce sa studiem algoritmi?
—  Sa descoperi secretele vietii si ale universului..

—  Sa rezolvi probleme care nu s-ar putea rezolva altfel?

—  Sa treci examenul acesta?

7
Cursurile
—  Slide-uri
—  Gadget-uri.. nu sunt permise!

NU NU NU

8
Examen
—  50% - laborator > 5!!!!
—  50% - examen scris >5!!!!

9
Pasi pentru dezvoltarea unui algoritm

—  Modeleaza problema.

—  Gaseste un algoritm pentru a o rezolva.

—  E destul de rapid? Ocupa multa memorie?

—  Daca nu, afla de ce.

—  Gaseste o metoda de a rezolva problema.

—  Repeta pana cand esti multumit de rezultat.

10
Analiza algoritmilor
—  Introducere

—  Modele matematice

—  Timp de rulare

11
Personaje
—  Programator: trebuie sa gaseasca o solutie

—  Client: vrea sa rezolve o problema eficient

—  Teoretician: vrea sa inteleaga

12
Motive pentru care analizam algoritmii
—  Prognoza performantei

—  Compararea algoritmilor

—  Pentru a oferi garantii

—  Pentru a intelege teoria

—  Pentru a nu avea bugg-uri

13
Cateva succese
—  Transformata discreta Fourier

—  Defalcarea unei unde in N componente periodice

—  Aplicatie: DVD, Jpeg, MRI, astrofizica

—  Brute force:

—  FFT:

14
Provocarea
—  Va face fata algoritmul meu unui input foarte mare?

15
Modele matematice
—  Timpul total de rulare: suma costului x frecventa operatiilor

—  Trebuie analizat programul pentru a determina operatiile

—  Costul depinde de masina, compilator

—  Frecventa depinde de algoritm, de date

16
—  Se estimeaza timpul de rulare sau memoria ca o functie cu

input N

—  Se ignora termenii de ordin mai mic

17
Operatie Frecventa Notatie
Declarare variabila N+2 ~N
Asignare N+2 ~N
<, > ½(N+1)(N+2) ~ ½ N^2
== ½ N(N-1) ~ ½ N^2
Accesare elemente array N(N-1) ~ N^2

Incrementare ½ N(N-1) pana la ~ ½ N^2


N(N-1) pana la ~ N^2

18
19
20
—  Cum estimam o suma discreta, daca nu reusim cu integrale?

21
Compararea algoritmilor
—  Definitie. Daca pentru o constanta
atunci ordinul de crestere a lui este

22
23
Teoria algoritmilor
—  Scop.

—  Sa se stabileasca dificultatea algoritmilor

—  Sa se dezvolte un algoritm optim

—  Abordare

—  Ne concentram pe cel mai rau caz

24
Notatii in teoria algoritmilor

25
Caracteristicile unui algoritm
—  Caracter finit. Un algoritm trebuie întotdeauna să se termine după un număr finit de

pași.

—  Este definit. Fiecare pas al unui algoritm trebuie definit cu precizie; acțiunile ce

urmează a fi întreprinse trebuie specificate riguros și fără ambiguități pentru fiecare caz
posibil.

—  Intrare. Un algoritm are zero sau mai multe intrări (inputs) – cantități care îi sunt date

inițial, înainte de începutul execuției sale, sau dinamic, în timp ce rulează.

—  Ieșire. Un algoritm are una sau mai multe ieșiri (outputs) – cantități ce au o anumită

legătură cu datele de intrare.

—  Eficiență.

26
Pe saptamana viitoare!

27

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