Sie sind auf Seite 1von 57

Complexidade de Algoritmos

Complexidade de pior caso Complexidade de melhor caso


de uso bem menos freqente em algumas situaes especficas menos utilizada apesar de importante difcil conhecer a distribuio de probabilidades das diferentes entradas
1

Complexidade de caso mdio


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

int fatorial (int N) { if (N<= 1) return(1); else return( N * fatorial(N-1)); }

Recursividade

X= fatorial (4)

return( return( return( return(

4* fatorial(3) ) 3* fatorial(2) ) 2* fatorial(1) ) 1 )

Anlise de Recursividade

relao de recorrncia a funo definida em termos dela prpria, recursivamente substituio repetida
1) 1)

int fatorial (int N) { if (N<= 1) return(1); else return( N * fatorial(N-1)); }

Anlise de Recursividade
T(n)

tempo de processar o algoritmo para entrada n nmero de passos ou operaes dominantes

Fatorial T(n) = 1, se n = 0 = T(n-1) + 1, se n > 0 mas quanto T(n-1) ?


7

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

Maior elemento de uma lista


maior = a[0]; for ( i =0; I < N; i++) if (maior < a[i]) maior = a[i]; return (maior);

Resolva as recorrncias

T(n)

T(n)
T(n)

= = = = = =

1, 2 T(n-1) + 1, 1 T(n/2) + 1 1 2T(n/2) - n

se se se se se se

n=0 n >0 n=0 n>1 n=1 n>1

10

Qual melhor algoritmo?

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

n > no f(n) c.h(n)

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)

Para a soma e o produto de matrizes n x n verifica-se complexidades 2 3 (n ) e (n ) respectivamente


19

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

nmero de chamadas complexidade de uma chamada


20

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

calcula a soma: se x =0 A + B ou o produto das matrizes: se x = 1 A * B

21

A notao

entrada: n2+1 informaes - tamanho O(n2) se x =0 ento complexidade: O(n2)

complexidade do melhor caso complexidade do pior caso

se x = 1 ento complexidade: O(n3)

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 esttica dinmicas Como manipul-las: pilhas filas


24

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

Operaes: busca, incluso e remoo outras operaes:


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:

Alocao: seqencial ou encadeada


26

Listas Sequenciais

Alocao seqencial de memria

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:

se i < j ento k[i] precede k[j]


27

Busca Seqencial

busca em uma lista seqencial


ordenada pelas suas chaves no ordenada

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

Se posio igual a N ento no existe no array N = nmero de elementos

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

Busca em uma Lista Ordenada

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

Busca em uma Lista Ordenada


Busca_Seqencial_Ord (v) { a[N].chave = v; do { pos = pos+1; } while ( v < a [pos].chave); if (v != a[pos].chave) return(pos); return(N); }

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

log n passos ---- O(log n)


40

Insero em Lista Ordenada

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

Complexidade: O(n). Por que? No foi busca binria?

Obs.: remoo equivalente


41

Complexidade Mdia - Busca Binria

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]

.... L[n-1] R[n-1] R[n]

42

Complexidade Mdia - Busca Binria

complexidade mdia = nmero de passos da busca


com sucesso + busca sem sucesso

busca com sucesso


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

busca sem sucesso


Complexidade Mdia - Busca Binria


(q/n)k + [(1-q)/(n+1)] (k+1) (n-q+2)/2

44

Algoritmos de Ordenao

Problema: encontrar um nmero de telefone em uma lista telefnica

simplificado pelo fato dos nomes estarem em ordem alfabtica e se estivesse sem uma ordem?

Problema: busca de um livro em uma biblioteca

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)

r[0], r[1], .r[n-1]

a chave a[i] est associada ao elemento r[i]


usualmente a chave um campo do registro os elementos esto classificados por pela chave

se i < j ento a[i] precede a[j]


46

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

Ordenao por Seleo

Um dos algoritmos de sort mais simples:

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

Ordenao por Seleo


inicial 9 2 6 3 5 7 2 9 6 3 5 7 2 3 6 9 5 7 Cada passo acha o menor e o coloca em sua posio

2 3 5 9 6 7
2 3 5 6 9 7 2 3 5 6 7 9
50

Sort por Seleo


Ord_Seleo() { int t, i, j,min; for (i=0;i< n-2; i++){ min = i; for (j=i+1; i< n-1; i++) if (a[j]<a[min]) min = j; /* troca */ t = a[min]; a[min]=a[i]; a[i] = t; } }

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.

especifique as listas a complexidade

57

Das könnte Ihnen auch gefallen