Sunteți pe pagina 1din 16

Utilizarea si programarea

calculatoarelor

Eficienta algoritmilor
Curs 5

D. Cosma

Exemplu de algoritm (1)

Cuprins
1.
1.Cautarea
Cautareaminimului
minimuluiintr-un
intr-unsir.
sir.

Problema: Cutarea celui mai mic numr ntrun ir aleator.

2.
2.Ordonarea
Ordonareacrescatoare
crescatoareaaunui
unuisir
sir

3.
3.Concatenarea
Concatenareaaa22siruri
siruriordonate
ordonate
4.
4.Strategia
Strategiadivide
divideand
andconquer
conquer

Care este cel mai


mic?

5.
5.Sortarea
Sortareasirurilor.
sirurilor.Buble-sort.
Buble-sort.
3

Procedura instinctiv de
cutare

Secvena 1: Cutarea celui mai mic


numr

Se ia primul numr i se compar cu al


doilea. Se reine cel mai mic (MIN).
MIN se compar cu al treilea numr i se
reine cel mai mic care devine MIN.
MIN se compar cu al patrulea numr i
se reine cel mai mic care devine MIN.
...

Pas 1: Alege primul numr din ir i presupune c acesta este


cel mai mic. (Min = 8)

8 2 4 9 3 6
Pas 2: Compar minimul cu urmtorul numr i alege cel mai
mic dintre ele (Min = 2)

8 2 4 9 3 6
Pas 3: Compar minimul cu urmtorul numr i alege cel mai
mic dintre ele (Min = 2)
8

Secvena 1: Cutarea celui mai mic


numr
Pas 4: Compar minimul cu urmtorul numr i alege cel mai
mic dintre ele (Min = 2)

Pas 5: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 2)

8 2 4 9 3 6
Pas 6: Compar minimul cu urmtorul numr i alege cel mai
mic dintre ele (Min = 2)
2

Soluie problem 1
Cel mai mic numr este 2.
Am parcurs un algoritm de cutare ntr-o
singur secven avnd ase pai!

8 2 4 9 3 6

Are ase pai pentru c erau ase numere n


ir?

6
7

Exemplu de algoritm (2)

Procedura instinctiv de sortare

Problema: Ordonarea cresctoare a unui ir


aleator.
8

Cum le ordonm?

Cutarea numrul cel mai mic din ir i


trecerea n prima csu.
Reinut c din lista iniial a fost scos
numrul respectiv.
Din lista rmas ai cutarea celui mai
mic i trecerea pe poziia doi.
Din lista rmas cutarea celui mai mic
numr i trecerea pe poziia trei.
...

Secvena 1: Cutarea celui mai mic numr

Pas 1: Alege primul numr din ir i presupune c acesta este


cel mai mic. (Min = 8)

10

Secvena 1: Cutarea celui mai mic


numr
Pas 4: Compar minimul cu urmtorul numr i alege cel mai
mic dintre ele (Min = 2)

8 2 4 9 3 6

8 2 4 9 3 6

Pas 2: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 2)

Pas 5: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 2)

8 2 4 9 3 6

8 2 4 9 3 6
Pas 3: Compar minimul cu urmtorul numr i alege cel mai
mic dintre ele (Min = 2)

Pas 6: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 2)

8 2 4 9 3 6

8
11

6
12

Secvena 2: Cutarea celui mai mic numr

Rezultat secvena 1

Pas 1: Alege primul numr din ir i presupune c acesta este


cel mai mic. (Min = 8)

Secvena 1 s-a terminat n 6 pai.


Cel mai mic numr din ir este 2.
8

Pas 2: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 4)

irul rmne cu 5 numere dintre care vom


cuta cel mai mic!
8

4 9 3 6

Pas 3: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 4)

13

14

Secvena 2: Cutarea celui mai mic


numr
Pas 4: Compar minimul cu urmtorul numr i alege cel mai
mic dintre ele (Min = 3)

Secvena 2 s-a terminat n 5 pai.


Cel mai mic numr din ir este 3.

4 9 3 6

Pas 5: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 3)

Rezultat secvena 2

4 9 3 6

irul rmne cu 4 numere dintre care vom


cuta cel mai mic!
8
15

6
16

Secvena 3: Cutarea celui mai mic numr


Pas 1: Alege primul numr din ir i presupune c acesta este
cel mai mic. (Min = 8)
8

Secvena 3: Cutarea celui mai mic numr

Pas 4: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 4)

4 9

Pas 2: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 4)

4 9

Pas 3: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 4)
8

6
17

Secvena 4: Cutarea celui mai mic numr

Rezultat secvena 3

Pas 1: Alege primul numr din ir i presupune c acesta este


cel mai mic. (Min = 8)

Secvena 3 s-a terminat n 4 pai.


Cel mai mic numr din ir este 4.
8

Pas 2: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 8)

irul rmne cu 3 numere dintre care vom


cuta cel mai mic!
8

18

Pas 3: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 6)

6
19

20

Secvena 5: Cutarea celui mai mic


numr

Rezultat secvena 4

Pas 1: Alege primul numr din ir i presupune c acesta este


cel mai mic. (Min = 8)

Secvena 4 s-a terminat n 3 pai.


Cel mai mic numr din ir este 6.
8

Pas 2: Compar minimul cu urmtorul numr i alege cel mai


mic dintre ele (Min = 8)

irul rmne cu 2 numere dintre care vom


cuta cel mai mic!
8

9
21

Secvena 6: Cutarea celui mai mic


numr

Rezultat secvena 5

Pas 1: Alege primul numr din ir i presupune c acesta este


cel mai mic. (Min = 9)

Secvena 5 s-a terminat n 2 pai.


Cel mai mic numr din ir este 8.
8

22

Rezultat secvena 6

Secvena 6 s-a terminat ntr-un pas.


Cel mai mic numr din ir este 9.

irul rmne cu 1 numr.

9
23

9
24

Concluzii rezolvare (1)

Concluzii rezolvare (2)


Generaliznd pentru n elemente din ir
numrul de pai se poate calcula.

Rezolvarea s-a realizat n ase secvene.


Prima secven a avut ase pai, al
doilea cinci pai, iar ultimul un singur pas.
Numrul pailor nu depinde de ordinea
iniial a numerelor din irul original.
Numrul total de pai de rezolvare a
problemei este 20 pentru ase elemente
din ir.

Ordonarea simpla a unui sir de numere

N = n
1

Numar de pasi (buc)

100000
80000
60000
40000
20000
0
0

100

200

300

400

Numere in sir (buc)

Orice algoritm care rezolv aceast problem din mai puini pai
25

este un algoritm mai eficient !!!

I. Fr a ine cont de ordonarea existent

Exemplu de algoritm (3)

Problema: Concatenarea a dou iruri


ordonate ntr-un singur ir ordonat.
2

13 20

11 12

26

27

Practic metoda din Problema 1.


Cautm cel mai mic dintre toate cele opt
numere (nu intereseaz c ele sunt pe iruri).
l punem pe acesta pe prima poziie n noul ir.
Din ce a rmas cautm cel mai mic numr i l
punem pe poziia doi al noului ir.
Din ce a rmas cautm cel mai mic numr i l
punem pe poziia trei al noului ir.
...
28

II. innd cont de ordonarea existent

tiind c cele dou iruri sunt deja ordonate


comparm primele numere din iruri.
Pe cel mai mic dintre cele dou l trecem n
prima csu a noului ir.
Numrul care l-am trecut n noul ir dispare
din irul doi iniial.
Comparm acum primul numr al celor dou
iruri rmase (n al doilea unu a disprut
deja) i cel mai mic dintre ele l trecem pe
poziia doi din noul ir.
...

Sec. 1: Identificarea celui mai mic numr


Pas 1: Comparm primele dou numere (Min = 1)
2

13

20

11

12

1
Pas 2: Eliminm cel trecut n irul concatenat
2

13

20

11

12

29

Sec. 2: Identificarea celui mai mic numr


Pas 1: Comparm primele dou numere (Min = 2)
2

30

Sec. 3: Identificarea celui mai mic numr


Pas 1: Comparm primele dou numere (Min = 7)

13

20

13

20

11

12

11

12

Pas 2: Eliminm cel trecut n irul concatenat


7

13

20

11

12

Pas 2: Eliminm cel trecut n irul concatenat

9
31

13

20

11

12
32

Sec. 3: Identificarea celui mai mic numr


Pas 1: Comparm primele dou numere (Min = 9)

Sec. 4: Identificarea celui mai mic numr


Pas 1: Comparm primele dou numere (Min = 11)

13

20

13

20

11

12

11

12

Pas 2: Eliminm cel trecut n irul concatenat


13

20

11

12

9 11

Pas 2: Eliminm cel trecut n irul concatenat


13

20
12

33

Sec. 5: Identificarea celui mai mic numr

Sec. 6: Identificarea celui mai mic numr


Pas 1: Pentru c nu mai exist numr pe irul doi urmtorul de pe
irul unu este minim. (Min = 13)

Pas 1: Comparm primele dou numere (Min = 12)


13

34

20

13

20

12

9 11 12

9 11 12 13

Pas 2: Eliminm cel trecut n irul concatenat

Pas 2: Eliminm cel trecut n irul concatenat


13

20

20

35

36

Sec. 6: Identificarea celui mai mic numr


Pas 1: Pentru c nu mai exist numr pe irul doi urmtorul de pe
irul unu este minim. (Min = 20)
20

9 11 12 13 20

Pas 2: Eliminm cel trecut n irul concatenat

Comparaia celor doi algoritmi


Primul algoritm are nevoie de 36 pai.
Al doilea algoritm are nevoie de 16 pai
(de dou ori numrul total de numere).
Deci al doilea algoritm este mai eficient
dect primul.
Putem discuta de eficiena unui algoritm !!!!

37

38

Strategia divide and conquer (2)

Strategia divide and conquer (1)


Exemplul anterior poate s furnizeze o idee.
Dac avem de ordonat un ir de 8 numere cu
metoda simpl (Problema 1) avem nevoie de
36 pai.
Dac mprim irul n dou iruri de cte 4
numere, ca s ordonm irurile astfel
obtinute avem nevoie de 10+10=20 pai.
Plus pentru concatenat nc 16 pai. n total
36 pai.
Nu pare s fie diferen!!!
39

La un ir de 4.000 de numere.
Prima metod are nevoie de 8.002.000
(adic opt milioane) de pai s ordoneze
un ir.

40

Strategia divide and conquer (3)

Strategia divide and conquer (4)


Dac mprim irul n opt iruri de cte 500 numere,
pentru ordonarea irurilor avem nevoie de
8x125.250=1.002.000 (un milion) de pai.
Pentru concatenarea a cte dou iruri de 500 n iruri
de 1000 de numere sunt necesare 4x1.000=4.000
pai.
Pentru concatenarea a dou de 1000 n una de 2000
ne sunt necesare 2x2.000=4.000 pai.
Pentru concatenarea celor dou de 2000 n cel final de
4000 de numere ordonate, 4.000 pai.
Adic n total
1.002.000+4.000+4.000+4.000=1.014.000 pai.
DE OPT ORI MAI PUIN!!

4000
Ordonare 8x125.250=1.002.000
500

500

1000

500

500

1000

500

1000

2000

1000

2000
4000

500

500

500

4x1.000=4.000 pai

2x2.000=4.000 pai

1x4.000=4.000 pai
41

42

Metoda bulelor (Bouble-sort)

Exemplu de algoritm (4)

Problema: Ordonarea cresctoare a unui ir


aleator.
8

Cum ordonm?
43

S parcurgem numerele.
Comparm cte dou numere consecutive.
Dac ele sunt n ordinea dorit (primul este
mai mic) nu facem cu ele nimic.
Dac nu sunt n ordinea dorit (primul este mai
mare) schimbm ordinea lor.
Repetm parcurgerea de la nceput de attea
ori pn toate numerele ajung n ordine
cresctoare.
44

Sec 1: Schimbm toate perechile

Sec 1: Schimbm toate perechile


Pas 2: Comparm urmtoarea pereche (trebuie
schimbate)

Pas 1: Comparm primele dou numere (trebuie


schimbate)
8

Reinem primul numr


8

Reinem primul numr


2

Schimbm al doilea cu primul


8

Schimbm al doilea cu primul


9

Rezult

Rezult
2

45

46

Sec 1: Schimbm toate perechile

Sec 1: Schimbm toate perechile

Pas 3: Comparm urmtoarea pereche (nu trebuie schimbate)

Pas 4: Comparm urmtoarea pereche (trebuie


schimbate)
2

Reinem primul numr


9

Schimbm al doilea cu primul


9

Rezult
47

6
48

Rezultat secvena 1

Sec 1: Schimbm toate perechile


Pas 5: Comparm urmtoarea pereche (trebuie
schimbate)
2

Dup secvena 1 avem irul:

Reinem primul numr


9

Schimbm al doilea cu primul


9

Rezult
9
49

50

Sec 2: Schimbm toate perechile

Sec 2: Schimbm toate perechile

Pas 1: Comparm primele dou numere (nu trebuie schimbate)

Pas 3: Comparm urmtoarele dou numere (trebuie


schimbate)

Reinem primul numr


Pas 2: Comparm primele dou numere (nu trebuie schimbate)
2

Schimbm al doilea cu primul


8

Rezult
51

52

Sec 2: Schimbm toate perechile

Sec 2: Schimbm toate perechile

Pas 4: Comparm urmtoarele dou numere (trebuie


schimbate)

Pas 5: Comparm urmtoarele dou numere (nu trebuie


schimbate)

Reinem primul numr


8

Rezultat secvena 2

Schimbm al doilea cu primul


8

Dup secvena 2 avem irul:

Rezult
8

9
53

54

Sec 3: Schimbm toate perechile

Sec 3: Schimbm toate perechile

Pas 1: Comparm primele dou numere (nu trebuie schimbate)

Pas 2: Comparm urmtoarele dou numere (nu trebuie


schimbate)

Reinem primul numr


4

Schimbm al doilea cu primul


4

Rezult
55

56

Rezultat secvena 3

Sec 3: Schimbm toate perechile


Pas 3: Comparm urmtoarele dou numere (nu trebuie
schimbate)

Dup secvena 3 avem irul:

Pas 4: Comparm urmtoarele dou numere (nu trebuie


schimbate)

8 9

Pas 5: Comparm urmtoarele dou numere (nu trebuie


schimbate)

tim dac irul este ordonat? NU!!!

9
57

58

Sec 4: Schimbm toate perechile

Sec 4: Schimbm toate perechile

Pas 1: Comparm primele dou numere (nu trebuie schimbate)

Pas 4: Comparm primele dou numere (nu trebuie schimbate)

Pas 3: Comparm urmtoarele dou numere (nu trebuie


schimbate)

Pas 5: Comparm urmtoarele dou numere (nu trebuie


schimbate)

Pas 2: Comparm urmtoarele dou numere (nu trebuie


schimbate)

Am parcurs o secven n care nu am fcut nici o schimbare de


poziie!
Ce nseamn acest lucru?
nseamn c irul a fost deja ordonat!!!

9
59

60

Performana algoritmului (1)

Performana algoritmului (2)

Numrul de parcurgeri (i de pai) depinde de


ordinea iniial a numerelor.
Dac numerele au fost n ordine cresctoare
o singur parcurgere n NR-1 pai este
suficient.
Situaia cea mai defavorabil apare cnd
numerele au fost aranjate descresctor. n
acest caz avem nevoie de cei mai muli pai.
Putem discuta de eficiena unui algoritm !!!!
Dar eficiena nu este constant, ci depinde de
ordinea iniial a datelor de intrare.

Numar parcurgeri in metoda Bulelor

N min = n 1

3000

Min(Deja sortate)
Max(Sortate invers)

2500
2000

N max = n (n 1)

1500
1000
500
0
0

10

20

30

40

61

50

62

Utilizarea si programarea calculatoarelor

Concluzie
Este esenial ca la dezvoltarea unui
program de calcul (mai ales la unu
intensiv din punct de vedere matematic)
s studiem eficiena algoritmului
utilizat!!!

63

http://cemsig.ceft.utt.ro/cursuri/

64

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