Sie sind auf Seite 1von 7

Complexidade de algoritmos

. O que um algoritmo e a complexidade?


Um algoritmo uma sequncia finita de instrues bem definidas e no ambguas, cada uma das quais pode ser executada mecanicamente num perodo de tempo finito e com uma quantidade de esforo finita.A Complexidade de um Algoritmo consiste na quantidade de trabalho necessria para a sua execuo, expressa em funo das operaes fundamentais, as quais variam de acordo com o algoritmo, e em funo do volume de dados

. reas de estudo da complexidade: - Complexidade Temporal: quantifica a poro de tempo tomada por um algoritmo para rodar em funo do tamanho da entrada.Ela estimada a partir da contagem do numero de operaes elementares realizadas pelo algoritmo. - Complexidade Espacial: representa o espao de memria usado para executar um algoritmo. (baseando-se em uma mesma entrada em ambos os casos) . Casos de complexidade: -Melhor caso (mega) -Caso mdio (Theta) -Pior caso (micron)

1)Melhor Caso Representa a melhor hiptese de execuo de um algoritmo,ou seja,ele ser executado no menor tempo possvel. 2)Caso Mdio Dos trs casos, o mais difcil de se determinar, porque necessita da mdia dos tempos de execuo de todas as entradas de tamanho N ou baseia-se na probabilidade de uma determinada condio ocorrer. 3)Pior Caso a pior possibilidade de execuo de um algoritmo,ou seja,ele vai ser executado no maior tempo possvel.

. Classes de Algoritmos Dentro da complexidade temporal foram definidas classes para facilitar o estudo,essas classes baseiam-se na forma de execuo do algoritmo,o que implicar em alteraes no tempo de execuo.Essas classes so: - Complexidade Constante - Complexidade Linear - Complexidade Logartmica - NlogN - Complexidade Quadrtica - Complexidade Cbica - Complexidade Exponencial

1)Complexidade Constante So os algoritmos de complexidade O(1) Independe do tamanho N de entradas o nico em que as instrues dos algoritmos so executadas num tamanho fixo de vezes

Exemplo : Vazia(Lista: TipoLista): Boolean; Begin Vazia := Lista.Primeiro = Lista.Ultimo; End;

2)Complexidade Linear So os algoritmos de complexidade O(N). O nmero de passos aumenta linearmente em relao ao tamanho da entrada feita.

Exemplo :Busca Linear(algoritmo em Pascal)


function procura(vetor :array [1..10] of integer; elementoProcurado: integer ; busca : boolean); {supondo que o vetor tem tamanho 10} var i : integer; begin busca:=false; for i := 1 to 10 do begin if (vetor[i] = elementoProcurado) then begin procura := i; {retorna o ndice do elemento procurado} busca:=true; {para indicar que a busca encontrou o valor procurado no vetor} end; end; end.

3)Complexidade logartmica So os algoritmos de complexidade O(logN) Ocorre tipicamente em algoritmos que dividem o problema em problemas menores

Exemplo:Busca Binria
def binsearch(seq, search): right = len(seq) left = 0 previous_center = -1 if search < seq[0]: return -1 while 1: center = (left + right) / 2 candidate = seq[center] if search == candidate: return center if center == previous_center: return - 2 - center elif search < candidate: right = center else: left = center previous_center = center

4)NlogN Como o prprio nome diz, so algoritmos que tm complexidade O(NlogN) Ocorre tipicamente em algoritmos que dividem o problema em problemas menores, porm juntando posteriormente a soluo dos problemas menores

Exemplo :Merge sort


def merge(lista_x,lista_y): if lista_x == []: return lista_y elif lista_y == []: return lista_x else: if lista_x[0] < lista_y[0]: return [lista_x[0]] + merge(lista_x[1:],lista_y) else: return [lista_y[0]] + merge(lista_x,lista_y[1:]) def mergesort(lista): if len(lista) <= 1: return lista else: mid = len(lista) // 2 return merge(mergesort(lista[:mid]), mergesort(lista[mid:]))

5)Complexidade Quadrtica So os algoritmos de complexidade O(N) Itens so processados aos pares, geralmente com um loop dentro do outro

Exemplo:Bubble sort
def bubbleSort(L,n): flag = True while flag: flag = False for i in range(n-1): if L[i] > L[i+1]: L[i],L[i+1] = L[i+1],L[i] flag = True

6)Complexidade Cbica So os algoritmos de complexidade O(N) Itens so processados trs a trs, geralmente com um loop dentro do outros dois

Exemplo:Multiplicao de matrizes para i = 1,...,n faa para j = 1,...,n faa C[i,j] = 0 para k = 1,...,n faa C[i,j] = C[i,j] + A[i,k] * B[k,j] fim para fim para fim para

7)Complexidade Exponencial
So os algoritmos de complexidade O(2N)

Utilizao de Fora Bruta para resolv-los (abordagem simples para resolver um determinado problema, geralmente baseada diretamente no enunciado do problema e nas definies dos conceitos envolvidos) Geralmente no so teis sob o ponto de vista prtico

. Anlise amortizada O que uma Anlise amortizada?


o resultado da anlise de uma sequencia de operaes numa estrutura de dados.Tem por objetivo mostrar que o custo mdio da operao baixo,mesmo tendo operaes caras no processo.

-Pilhas

Uma pilha uma estrutura de dados onde em todas as inseres, retiradas e acessos ocorrem apenas em um dos extremos (no caso, em seu topo). Uma pilha suporta as seguintes operaes: Empilhar(push) : insere um elemento no topo da lista Desempilhar(pop) : remove o elemento do topo Topo(top) : acessa o elemento do topo da lista Vazia(isEmpty) : indica se a pilha esta vazia Tamanho(size) : retorna a quantidade de elementos da pilha

.Estrutura de dados
Uma estrutura de dados um modo particular de armazenamento e organizao de dados em um computador de modo que possam ser usados eficientemente.

-rvore binria
Uma arvore binria uma estrutura de dados que pode ser representada como uma hierarquia onde cada elemento chamado de n . O n inicial ou o primeiro elemento chamado de raiz. Em uma arvore binria um elemento pode ter um mximo de dois filhos no nvel inferior denominados como sub-rvore esquerda e sub-rvore direita.Um n sem filhos chamado de folha . A profundidade de um n a distncia deste n at a raiz e a distancia entre a folha mais distante e a raiz a altura da arvore.Um conjunto de ns com a mesma profundidade denominado, nvel da rvore.

-Tabela Hash
uma estrutura de dados especial, que associa chaves de pesquisa a valores. Seu objetivo , a partir de uma chave simples, fazer uma busca rpida e obter o valor desejado.Tabelas de disperso so tipicamente utilizadas para implementar vetores associativos, conjuntos e caches. So tipicamente usadas para indexao de grandes volumes de informao (como bases de dados). A implementao tpica busca uma funo de disperso que seja de complexidade, no importando o nmero de registros na tabela (desconsiderando colises). O ganho com relao a outras estruturas associativas (como um vetor simples) passa a ser maior conforme a quantidade de dados aumenta.

Bibliografia
http://pt.wikipedia.org/wiki/Tabela_de_dispers%C3%A3o http://www.4learn.pro.br/leandro/ed_tarde_2011_1/complexidade_algoritmos.pdf http://pt.wikipedia.org/wiki/Complexidade_computacional http://pt.scribd.com/doc/70962949/9/Complexidade-Logaritmica

Das könnte Ihnen auch gefallen