110 likes | 285 Views
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)); }. Recursividade. X= fatorial (4) return( 4* fatorial(3) )
E N D
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)); }
Recursividade • X= fatorial (4) • return( 4* fatorial(3) ) • return( 3* fatorial(2) ) • return( 2* fatorial(1) ) • return( 1 )
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)?
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
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]; } } 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); } }