Beruflich Dokumente
Kultur Dokumente
de uso bem menos freqente em algumas situaes especficas menos utilizada apesar de importante difcil conhecer a distribuio de probabilidades das diferentes entradas
1
Recursividade
um procedimento recursivo aquele que contm uma ou mais chamadas a si mesmo a todo procedimento recursivo corresponde um no recursivo os programas recursivos so mais concisos aparente relao direta com a prova por induo matemtica
Recursividade
Clculo de fatorial
x! = se x <=0 1 seno x * (x-1)! Implementao no recursiva int fatorial (int N) { int result = 1; for (i=1; i<=N; i++) result = result * i; return (result); }
Recursividade
Implementao recursiva
Recursividade
X= fatorial (4)
Anlise de Recursividade
relao de recorrncia a funo definida em termos dela prpria, recursivamente substituio repetida
1) 1)
Anlise de Recursividade
T(n)
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
8
Resolva as recorrncias
T(n)
T(n)
T(n)
= = = = = =
se se se se se se
10
Sejam A e B dois algoritmos que o resolvem o problema P, cujos tempos de execuo so TA(n) e TB(n) comportamento assinttico tamanho da entrada arbitrariamente grande caracterizado pela notao O (big O)
11
A notao
Sejam f(n) e h(n) funes reais no negativas da varivel inteira n 0 f(n) = O (h(n)) quando existir uma constante c> 0 e um valor inteiro no tal que
12
A notao
f(n) = 8n + 128 O (n2)? f(n) c.n2 ? Seja c =1 8n + 128 n2, ento 0 n2 8n 128 0 (n 16)(n+8) n0 = 16 c =1, no = 16, f (n) c.n2 para todo n n0
13
A notao
Tempo (ou espao) contabilizado em nmero de passos do algoritmo (unidade de armazenamento) Anlise do algoritmo determina uma funo que depende do tamanho da entrada n. 10n3 + 4n -10
medida que n aumenta, o termo cbico comea a dominar A constante do termo cbico tem relativamente a mesma importncia que a velocidade da CPU
14
A notao
Complexidade
desprezar constantes aditivas ou multiplicativas
nmero de passos 3n ser aproximado para n interesse assinttico - termos de menor grau podem ser desprezados: n2 + n ser aproximado para n2 6n3 + 4n - 9 ser aproximado para n3
15
A notao
A funo atua como um limite superior assinttico da funo f 2 f = n -1 f = (n2) 2 f = n -1 f = (n3) f = 403 f = (1) 2 f = 5+2logn +3log n f = (log2n) 2 f = 5+2 log n +3log n f = (n) n 10 f = 5.2 +5n f = (2n)
16
A notao
g(n), h(n) - funes reais positivas k - constante f1(n) = g(n) e f2(n) = h(n)
O(g+h) = O(g) + O(h) O(k*g) = k O(g) = O(g) f1(n) + f2(n) = O(max {g(n), h(n)}) f1(n) * f2(n) = O(g(n) * h(n))
17
A notao
O algoritmo de inverso de uma seqncia: o nmero de passos se mantm o mesmo para o mesmo valor de n varivel independente n as complexidades de pior, melhor e pior casos so iguais
18
A notao
Para a inverso
efetua sempre n/2 passos ento sua complexidade (n)
A notao
Para procedimentos recursivos pode-se aplicar a seguinte tcnica determina-se o nmero total de chamadas ao procedimento recursivo calcula-se a complexidade de execuo de uma nica chamada complexidade
A notao
por outro lado, um outro exemplo: duas matrizes A e B de dimenses n x n um parmetro x, com valores 0 ou 1 dependendo do valor de x
21
A notao
22
Alguns conceitos
T (n) = O (1) : constante T (n) = O (log log n) : super-rpido T (n) = O (log n) : logartmico muito bom T (n) = O (n) : linear toda a entrada visitada T (n) = O (n log n) : limite de muitos problemas T (n) = O (n2) : quadrtico T (n) = O (nk) : polinomial no tamanho da entrada T (n) = O (kn), O (n!), O (nn) : exponencial ruim!
23
Estrutura de Dados
Listas Lineares
fcil manipulao agrupa informaes referentes a um conjunto de elementos que se relacionam entre si Uma lista linear ou tabela um conjunto de n elementos L[0], L[1], ......, L[n-1] tais que n>0, e L[0] o primeiro elemento para 0 < k < n, L[k] precedido por L[k-1]
25
Listas Lineares
alterao de um elemento na lista combinao de duas ou mais listas ordenao remoo e insero apenas nas extremidades - deque insero/remoo em um nico extremo - pilha inseres e um extremo e remoes no outro - fila
Casos particulares:
Listas Sequenciais
endereo do (j+1) simo elemento se encontra a uma unidade de armazenamento j-simo elemento
Representao e acesso i-simo elemento: L[i] Cada elemento pode ser formado por campos
uma chave k[i] est associada ao n L[i] a lista dita classificada ou ordenado por chave quando:
Busca Seqencial
Problema: busca pelo valor v em um conjunto de N elementos. O procedimento retorna o valor da posio da lista sequencial se encontrar e N, caso contrrio
28
Busca Seqencial
1 1
5 3 2 9 7
5 3 2 9 7
29
Busca Seqencial
1 1
5 3 2 9 7
5 3 2 9 7 4
30
Busca Seqencial
Busca_Seqencial_1 (v){ pos = 0; while ( (v != L [pos]) && (pos<N) ) pos++; return(pos); } Busca_Seqencial_2 (v){ L[N] = v; pos = -1; do { pos = pos+1; } while ( v != L [pos]) return(pos); }
31
Busca Seqencial
A complexidade do pior caso O(n) para os dois algoritmos O segundo de execuo mais rpida pois o nmero de testes menor a cada iterao Problema: inserir um novo valor em uma lista seqencial desordenada, caso no exista na respectiva lista
32
Insero
Insere_seq (int v) { if (N == (maxN -1)) overflow; if (N != 0) { pos = busca_sequencial (v); if ( pos == N) { L[pos] = v; N++; } } else { L[0] = v; N++;} } Complexidade: O (n). Por que?
33
Remoo
Problema: remover um valor v existente em uma lista seqencial desordenada com N elementos
34
Remoo
if (N != 0) { indice = busca_sequencial (x); if (indice != N){ elemento = a[indice]; for (i = indice; i < (N-1); i ++) L[i] = L[i + 1]; N--; } else elemento no encontrado; }else underflow Complexidade: O (n) (?)
35
Problema: buscar um valor v no existente em uma lista seqencial ordenada com N elementos o tempo de busca pode ser reduzido significantemente devido a relao entre os elementos da lista, mesmo para um conjunto de elementos grande
36
complexidade?
37
Busca Binria
Busca baseada em "dividir para conquistar" divida um conjunto de elementos em duas partes determine a qual dessas duas partes a chave pertence e se concentre nessa parte use ndices do array para delimitar a parte sendo trabalhada ou seja: compare com a chave do elemento do meio se a chave comparada for menor, o elemento est na parte esquerda da lista, se maior, na parte direita aplique o mtodo recursivamente
38
Busca Binria
busca_binaria (v) { e = 0; d = N-1; do { pos= (e + d)/ 2; if (v < a[pos].chave) d = pos-1; else e=pos+1; }while ((v!=a[pos].chave) && (e <= d)); if (v== a[pos].chave) return(pos); else return(N); }
39
Busca Binria
2 5 6 7 9 15 16 23 25 40 52 55 Complexidade: suponha que n = 2k
1o passo: uma lista de n elementos 2o passo: uma lista de n/2 elementos 3o passo: uma lista de n/4 elementos .......... k-simo passo: uma lista de n/2(k-1) elementos (k+1)-simo elemento: uma lista de 1 elemento
Problema: insero de um valor v em uma lista de elementos ordenada por chave, caso esse elemento no se encontre na lista Passos: busca insero na posio retornada
Comportamente mdio do algoritmo de busca binria q - probabilidade de sucesso da busca (1-q) - probabilidade de no achar
L[0] R[0]
L[1] R[1]
L[2] R[2]
42
so n possibilidades de ter sucesso mesma probabilidade para qualquer elemento: q/n intervalo R[i] L[i-1] < v < L[i] a probabilidade a mesma para qualquer intervalo = (1- q)/(n+1)
43
44
Algoritmos de Ordenao
simplificado pelo fato dos nomes estarem em ordem alfabtica e se estivesse sem uma ordem?
a cada livro atribuda uma posio relativa a outros e portanto pode ser recuperado em um tempo hbil
45
Algoritmos de Ordenao
Terminologia bsica seqncia de n tens ou elementos (registros)
usualmente a chave um campo do registro os elementos esto classificados por pela chave
Terminologia bsica
a ordenao tem por objetivo rearrumar as chaves de forma que obedeam a uma regra (ex.: ordem numrica ou alfabtica) se os elementos representam registros de um arquivo, sendo representado por uma lista sequencial em memria principal a ordenao interna se o arquivo estiver em memria secundria a ordenao externa
47
Terminologia bsica
a ordenao estvel se preserva a ordem relativa das chaves iguais (seno, instvel) os algoritmos podem operar sobre o elemento ou sobre uma tabela de ponteiros
registro muito grande: ordenao indireta os registros no so rearrumados e sim os ndices as chaves tanto podem ficar armazenadas com os registros ou com os ponteiros
48
ache primeiro o menor elemento da lista e troque sua posio com o primeiro elemento ache o segundo menor elemento e troque sua posio com o segundo elemento continue at que toda lista esteja ordenada
para cada i de 0 a n-2, troca o menor elemento da sub-lista que vai de i a N-1 com a[i]
49
2 3 5 9 6 7
2 3 5 6 9 7 2 3 5 6 7 9
50
complexidade?
51
Bubble Sort
percorrer a lista trocando elementos adjacentes, se necessrio quando nenhuma troca for efetuada ao percorrer toda a lista est classificada
52
Bubble Sort
9 2 6 3 5 7 2 6 3 9 5 7
2 9 6 3 5 7
2 6 3 5 9 7
2 6 9 3 5 7
2 6 3 5 7 9
53
Bubble Sort
2 6 3 5 7 9 2 3 5 6 7 9
2 6 3 5 7 9
2 3 5 6 7 9
2 3 6 5 7 9
54
Bubble Sort
2 3 5 6 7 9
No ocorreram trocas
2 3 5 6 7 9
2 3 5 6 7 9
55
Bubble Sort()
{ int i, j, t, trocas; for (i = n-1; i>0; i--) { trocas = 0; for (j = 1; j <= i; j++){ if (a[j-1] > a[j]){ /* troca */ t = a[j-1]; a[j-1] = a[j]; a[j] = t; trocas++; } } if (trocas == 0) break; } }
complexidade?
56
Pensar
escreva um algoritmo de merge de duas listas sequenciais ordenadas, analisando sua complexidade escreva um algoritmo que some dois polinmios, sendo estes, representados por listas sequenciais.
57