Академический Документы
Профессиональный Документы
Культура Документы
Tipos de dados
ySimples: Caracteres (char), Inteiros (int), Reais (float), Booleanos (bool), ... yCompostos: Cadeias, Vetores, ...
y
Operao: Aritmticas, Insero, Remoo, Ordenao, Mximo, Mnimo, Inverso, Transposio, etc.
Dificuldade para reproduzir experimentos (ambientes multitarefa, compiladores, sistemas operacionais, etc). Necessidade de implementao do algoritmo.
Mtodos Analticos
y y y
Aproximaes atravs de modelos matemticos. No depende de implementaes. Resultados podem no ser relevantes na prtica.
Estimativa do tempo de execuo (passos - operaes atmicas) Tamanho de um problema Pior caso, melhor caso e caso mdio Anlise assinttica Ordem O, Omega e Theta (link interessante) Algumas classes importantes de funes: o O(1) - Constante o O(logn) - Logartmico o O(n) - Linear ou Polinomial de Ordem 1 o O(n) - Polinomial de Ordem 2 o O(n) - Polinomial de Ordem 3 n o O(2 ) - Exponencial
Algoritmo A B C D
E f(n)=2 Observaes
y y y
1 dia ~ 1014 ns 1 ano ~ 1016ns 2000 anos ~ 10 19 ns Grfico ilustrando comportamento assinttico de certas classes de funes
Para gerar o grfico acima utilizando o SciLab faa download do arquivo assintotico.sci e execute-o utilizando o comando exec(assintotico.sci) Exemplo: Algoritmo: Busca Elemento Entrada: S[1],...,S[n] e elemento x a ser procurado. Saida: Booleano indicando se x est ou no no vetor. FuncaoBusca(S[],x) para i:=1,...,n faca ; c1
; c2 ; c3 ; c4
Complexidade melhor caso = O(1) Complexidade pior caso = O(n) Complexidade caso mdio = O(n) [demonstrao utiliza estatstica]. Clculo pior caso: f(n) = (n+1)*c1 + n*c2 + 0*c3 + 1*c4 ; c1=c2=...cm = 1 = (n+1)*1 + n*1 + 0 +1 = 2n + 2 = O(n) Prova: c = 3 e n' = 2 Clculo melhor caso: f(n)=1+1+1+0=3=O(1) Algumas das propriedades das funes O (Big O) Se f = O(g) e g = O(h) entao f = O(h) n = O(n) n = O(n) logn = O(n) 1 = O(n) n = O(2^n) O(g+h) = O(g) + O(h) O(kg) = kO(g) = O(g) f = 3n + n^3 + logn = O(n) + O(n) + O(logn) = O(n)+O(n)+O(n) = 3O(n) = O(n).
Algoritmos timos
O Limite inferiorg de um problema P uma funo tal que a complexidade (no pior caso), de qualquer algoritmo que resolva o problema P, est limitada inferiormente, assintoticamente, pela funo g. (denota-se por Omega(g) a classe de funes limitadas inferiormente por g). Qualquer algoritmo com complexidade O(g) chamado de timo (sempre em relao a algum problema P). Note que o algoritmo timo est limitado superiormente (big O) e inferiormente (Omega) por g.
Resultados e constataes interessantes (que sero aprofundadas em disciplinas especficas na rea da teoria da computao):
y y
Existem algoritmos timos para alguns problemas importantes. Existem problemas importantes inerentemente exponenciais.
Existem problemas importantes para os quais no se conhece algoritmos que no sejam exponenciais, embora tambm no se tenha demonstrado a impossibilidade desses algoritmos existirem.
funcaoOrdenacao-por-Insercao(S) para j:=2,...,n faca ; c1 chave := S[j] ; c2 i := j - 1 ; c3 enquanto i > 0 e S[i] > chave faca ; c4 S[i+1] := S[i] ; c5 i := i - 1 ; c6 A[i+1] := chave ; c7
void Ordena(int * S, int n) { intchave,i,j; for(j=2;j<=n;++j) { chave = S[j]; i = j - 1; while(i>0 && S[i]>chave) { S[i+1] = S[i]; --i; } S[i+1] = chave; } }
Exemplo Execuo: _5 2* 4 6 1 3 2 _5 4* 6 1 3 2 4 5 _6* 1 3 _2 4 5 6 1* 3 1 2 _4 5 6 3* 1 2 3 4 5 6 Complexidade do melhor caso: (while sempre falha) c1*n + c2*(n-1) + c3*(n-1) + c4*Sum(j:=2,...,n de t(j)) + c5*Sum(j:=2,....n de t(j)-1) + c6*Sum(...,t(j)-1) + c7*(n-1) = n+3*(n-1)+Sum(t(j))+2*Sum(t(j)-1) = Melhor caso: t(j) = 1 para j:=2,...n por isto Sum(t(j)) = Sum(j:=2,...,n de 1) = n - 1 Sum(t(j)-1) = Sum(0) = 0 n+3n-3+(n-1)+(n-2) = 6n-6 = O(n)
Complexidade no pior caso: (while falha em i >0) Apenas t(j) muda. t(j) = j , para j := 2,...,n Sum(j:=2,...,n de j) = Sum(j:=1,...,n de j) - 1 = n/2*(n+1)-1 Sum(j:=2,...,n de j-1) = Sum(j:=1,...,n-1 de j) = n*(n-1)/2