Documente Academic
Documente Profesional
Documente Cultură
TAP
INFO II, III
2010-2011
Algoritm
Def:
O metodă efectivă de rezolvare a unei probleme.
Obs:
1. Problema determină algoritmul.
2. Ce înseamnă efectivă?
3. Dacă există mai mulţi algoritmi, pe care îl
utilizez?
Algoritm
Obs:
1. Problema determină algoritmul.
Pentru probleme diferite, se presupune că se
găsesc algoritmi diferiţi.
Este finit
Sunt 2 structuri repetitive imbricate, pentru care secvenţa internă se execută de
un număr finit de ori.
Eficienţă
Se va măsura. Optimalitate – Nu se pune problema (încă).
Analiza algoritmilor
Exemplu: Sortarea prin interschimbare
Eficienţă
Se alege instrucţiunea elementară: atribuirea.
Se numără atribuirile:
n2 n 1
(1
i 0
(1
j i 1
3)) O ( n 2
)
Ramanujan, Srinivasa (1988), The lost notebook and other unpublished papers, Springer Berlin, p. 339, ISBN
354018726X
Analiza algoritmilor
Automatizarea analizei (trasare – profiling)
1. Expandare (augmentation)
instrucţiuni suplimentare
2. Execuţie (execution)
rezultate scrise în fişiere speciale
3. Analiza (analysis)
analiza fişierelor rezultate
Analiza algoritmilor
Automatizarea analizei (trasare – profiling)
Exemplu pentru atribuiri
count = 0
for each i in 0 to n – 2
count++
for each j in i + 1 to n – 1
count++
if A[i] > A[j] then
swap( A[i], A[j] )
count+=3
end for
end for
Fără probleme
Analiza algoritmilor
Automatizarea analizei (trasare – profiling)
Exemplu pentru timp
begin_time = clock()
for each i in 0 to n – 2
for each j in i + 1 to n – 1
if A[i] > A[j] then swap( A[i], A[j] )
end for
end for
end_time = clock()
needed_time = end_time - begin_time
Apar probleme
Analiza algoritmilor
Automatizarea analizei (trasare – profiling)
Exemplu pentru timp
Apar probleme:
Granularitatea ceasului introduce erori (unele
execuţii se fac în timp zero).
Rezolvare (parţială): Se realizează execuţii
multiple şi se calculează media aritmetică.
Analiza algoritmilor
Automatizarea analizei (trasare – profiling)
Exemplu pentru timp
begin_time = clock()
for k in 1 to nexec
reset A
for each i in 0 to n – 2
for each j in i + 1 to n – 1
if A[i] > A[j] then swap( A[i], A[j] )
end for
end for
end for
end_time = clock()
needed_time = (end_time - begin_time)/nexec
Analiza algoritmilor
Automatizarea analizei (trasare – profiling)
Exemplu pentru timp
De ce parţială?
Se introduc suplimentări de timp prin resetarea lui
A.
Altă rezolvare (tot parţială): se consideră doar
aplicaţia originală la captarea timpului.
Analiza algoritmilor
Automatizarea analizei (trasare – profiling)
Exemplu pentru timp
needed_time = 0
for k in 1 to nexec
reset A
begin_time = clock()
for each i in 0 to n – 2
for each j in i + 1 to n – 1
if A[i] > A[j] then swap( A[i], A[j] )
end for
end for
end_time = clock()
needed_time += (end_time - begin_time)
end for
needed_time /=nexec
Analiza algoritmilor
Automatizarea analizei (trasare – profiling)
Exemplu pentru timp
De ce tot parţială?
Se preiau neajunsurile de la trasarea iniţială.
Se definesc cazurile:
• cel mai favorabil (consum minim de resurse)
• mediu (statistica pentru toate cazurile – se
generează toate posibilităţile – uneori infezabil)
• cel mai nefavorabil (consum maxim de
resurse)
Analiza algoritmilor
Analiză teoretică.
Instrucţiune elementară: comparaţia.
NU
Analiza algoritmilor
Analiză teoretică.
Instrucţiune elementară: comparaţia.
Arborele de decizie: binar, frunza este o permutare,
nodul are o comparaţie.
Analiza algoritmilor
Analiză teoretică.
Instrucţiune elementară: comparaţia.
DA
care???