slide2 - Introdução

Propaganda
Complexidade de Algoritmos
Recursivos
Alex F. V. Machado
Recursividade

Implementação recursiva
int fatorial (int N)
{
if (N<= 1)
return(1);
else
return( N * fatorial(N-1));
}
2
Recursividade

X= fatorial (4)




return( 4* fatorial(3) )
return( 3* fatorial(2) )
return( 2* fatorial(1) )
return( 1 )
3
Análise de Recursividade
• T(n)


tempo de processar o algoritmo para entrada n
número de passos ou operações dominantes
– Fatorial
– T(n) = 1,
se n = 0
–
= T(n-1) + 1, se n > 0
mas quanto é T(n-1) ?
4
T(n) - Fatorial
•
•
•
•
•
•


= (T(n-1)) + 1
= (T(n-2) + 1) + 1
= T(n-2) + 2
= (T(n-3) + 1) + 2
= T(n-3) + 3
.....
forma geral, T(n) = T(n-k) + k, 1  k  n
fazendo n = k, reduzimos a T(n) = n
5
void mergeSort(int vec[], int vecSize) {
int mid;
if (vecSize > 1) {
mid = vecSize / 2;
mergeSort(vec, mid);
mergeSort(vec + mid, vecSize - mid);
merge(vec, vecSize);
}
}
void merge(int vec[], int vecSize) {
int mid; int i, j, k; int* tmp;
mid = vecSize / 2;
i = 0; j = mid; k = 0;
while (i < mid && j < vecSize) {
if (vec[i] > vec[j]) {
tmp[k] = vec[i];
++i;
}
else {
tmp[k] = vec[j];
++j;
}
++k;
}
if (i == mid) {
while (j < vecSize) {
tmp[k] = vec[j];
++j;
++k;
}
}
else {
while (i < mid) {
tmp[k] = vec[i];
++i;
++k;
}
}
for (i = 0; i < vecSize; ++i) {
vec[i] = tmp[i];
}
}
Download