Sie sind auf Seite 1von 116

Projeto e Anlise de Algoritmos

Prof. Reinaldo

Ementa
Conceitos bsicos: motivao e soluo de problemas, critrios de anlise, correo e eficincia. Anlise de Algoritmos; tempo de processamento e operaes elementares, complexidade de pior caso, comparao de algoritmos. Anlise de Crescimento de Funes. Recorrncias e Funes Geradoras. Anlise Probabilstica e Anlise Amortizada. Algoritmos e estruturas de dados para problemas em grafos. Tcnicas de construo de algoritmos (gulosos, programao dinmica, diviso e conquista). Teoria da complexidade: as classes P, NP, Npcompleto. Hierarquia em complexidade computacional. Algoritmos heursticos, busca heurstica, algoritmos heursticos X algoritmos exatos. 2

REFERNCIAS
BSICA
ASCENDIO, Ana Fernanda Gomes. Estruturas de dados: algoritmos, anlise da complexidade e implementao em JAVA e C/C++. So Paulo:Person Prentice Hall, 2010. DROZDEK, Adam. Estrutura de dados e algoritmo em C++. So Paulo: Pioneira Thomson Learing, 2002. ZIVIANI, Nvio.Projeto de Algoritmos com Implementaes em Java e C++.So Paulo: Pioneira Thomson Learing, 2006.
3

CONTEDO PROGRAMTICO
UNIDADE 1 FUNDAMENTOS TERICOS SOBRE ANLISE DE ALGORTIMOS. CH TOTAL: 12 Introduo disciplina, apresentar definies importantes da rea de estudo denominada para anlise de algoritmos. Embasamento terico e uma viso geral das perspectivas, na rea de computao.
4

CONTEDO PROGRAMTICO
Ch Ch Ch Pra Teo Pra Ped

Viso geral da disciplina projeto e anlise de algoritmos. Objetivo da disciplina projeto e anlise de algoritmos. Resolver algoritmos e estrutura de dados em Java. Definir tipos de dados, tipos abstratos de dados, medida do tempo de execuo de um programa. Compreender comportamento assinttico de funes, classes de comportamento assinttico e tcnicas de anlise de algoritmos em Java.

01
01

04
02

01 03
5

Algoritmos, Estruturas de Dados e Programas


Os algoritmos fazem parte do dia-a-dia das pessoas. Um algoritmo pode ser visto como uma sequncia de aes executveis para a obteno de uma soluo para um determinado tipo de problema.
6

Algoritmo
Segundo Cormen (2002), um algoritmo qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como a sada

Algoritmo
Segundo Dijkstra, um algoritmo corresponde a uma descrio de um padro de comportamento, expresso em termos de um conjunto finito de aes.

CONTEDO PROGRAMTICO
Definir tipos de dados, tipos abstratos de dados, medida do tempo de execuo de um programa.

Algoritmos
Os algoritmos so utilizados para resolver diversos tipos de problemas, por exemplo:
Comrcio Eletrnico; Instrues para o uso de medicamentos; Indicaes de como montar um aparelho; Entre outros.
10

Estrutura de Dados
Quando os dados obtidos na entrada do algoritmo so dispostos e manipulados de forma homognea no processo de computao de sua sada, trata-se de tipo abstrato de dados. Uma estrutura de dados um meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificaes (Cormen, 2002).
11

Estrutura de Dados
Todos os problemas a serem resolvidos por algoritmos possuem dados. Estes so armazenados em estruturas, escolhidas de acordo com as operaes que podem ser realizadas sobre elas e com o custo de cada uma dessas operaes.

12

Estrutura de Dados
Estruturas de dados e algoritmos esto intimamente ligados:
no se pode estudar estruturas de dados sem considerar os algoritmos associados a elas, assim como a escolha dos algoritmos em geral depende da representao e da estrutura dos dados.
13

Estrutura de Dados
Para resolver um problema necessrio escolher uma abstrao da realidade, em

geral mediante a definio de um conjunto


de dados que representa a situao real.

14

Programas
Programar basicamente estruturar dados e construir algoritmos. Programas so formulaes concretas de algoritmos abstratos, baseados em representaes e estruturas especficas de dados. Programas representam uma classe especial de algoritmos capazes de serem seguidos por computadores.
15

Tipos de dados
Caracteriza o conjunto de valores a que uma constante pertence, ou que podem ser

assumidos por uma varivel ou expresso, ou que podem ser gerados por uma funo. Tipos simples de dados so grupos de valores indivisveis (como os tipos bsicos int, float, double e char).
16

Anlise de Algoritmo
Envolve dois tipos de problemas distintos (Knusth, apud Ziviani, 1971): anlise de um algoritmo particular: calcular o custo de um determinado algoritmo na resoluo de um problema. anlise de uma classe de algoritmos: determinar o algoritmo de menor custo possvel para resolver um problema.
17

Anlise de Algoritmo
O que anlise de algoritmos Segundo Cormen (2002), a previso dos recursos de que o algoritmo necessitar. - Memria. - Largura de banda de comunicao. - Hardware de computao. - Tempo de computao.
18

Tipos de Problemas na Anlise de Algoritmos


Anlise de um algoritmo particular. Qual o custo de usar um dado algoritmo para resolver um problema especfico? Caractersticas que devem ser investigadas: 1.anlise do nmero de vezes que cada parte do algoritmo deve ser executada, 2. estudo da quantidade de memria necessria.
19

Tipos de Problemas na Anlise de Algoritmos


Anlise de uma classe de algoritmos. Qual o algoritmo de menor custo possvel para resolver um problema particular? Toda uma famlia de algoritmos investigada. Procura-se identificar um que seja o melhor possvel.

Coloca-se limites para a complexidade computacional dos algoritmos pertencentes classe.


20

Custo de um Algoritmo
Determinando o menor custo possvel para resolver problemas de uma dada classe, temos a medida da dificuldade inerente para resolver o problema. Quando o custo de um algoritmo igual ao menor custo possvel, o algoritmo timo para a medida de custo considerada.
21

Custo de um Algoritmo
Podem existir vrios algoritmos para resolver o mesmo problema. Se a mesma medida de custo aplicada a diferentes algoritmos, ento possvel compar-los e escolher o mais adequado.

22

Tipos Abstratos de Dados (TADs)


Modelo matemtico, acompanhado das operaes definidas sobre o modelo. TADs so utilizados extensivamente como base para o projeto de algoritmos. A implementao do algoritmo em uma linguagem de programao especfica exige a representao do TAD em termos dos tipos de dados e dos operadores suportados. A representao do modelo matemtico por trs do tipo abstrato de dados realizada mediante uma estrutura de dados.
23

Implementao de TADs
Considere uma aplicao que utilize uma lista de inteiros. Poderamos definir TAD Lista, com as seguintes operaes:

1. Faa a lista vazia; 2. Obtenha o primeiro elemento da lista; se a lista estiver vazia, ento retorne nulo; 3. Insira um elemento na lista.
24

Complexidade no Desempenho de Algoritmo


O fato do algoritmo resolver (teoricamente) um problema no significa que seja aceitvel na prtica. s vezes, o algoritmo mais imediato est longe se ser razovel em termos de eficincia. Um exemplo o caso da soluo de sistemas de equaes lineares. 25

Complexidade no Desempenho de Algoritmo


n
2x2 3x3 4x4 5x5 10x10 20x20 40x40

Mtodo de Cramer Mtodo de Gauss


22 s 102 s 456 s 2,35 ms 1,19 mim 15.225 sculos 5*10 33 sculos 50 s 159 s 353 s 666 s 4,95 ms 38,63 ms 0.315 s
26

Fonte:Complexidade de algoritmo, Toscani, 2001

Medida do Tempo de Execuo de um Programa


O projeto de algoritmos fortemente influenciado pelo estudo de seus comportamentos. Depois que um problema analisado e decises de projeto so finalizadas, necessrio estudar as vrias opes de algoritmos a serem utilizados, considerando os aspectos de tempo de execuo e espao ocupado. Muitos desses algoritmos so encontrados em reas como pesquisa operacional, otimizao, teoria dos grafos, estatstica, probabilidades, entre outras.
27

Medida do Custo pela Execuo do Programa


Tais medidas so bastante inadequadas e os resultados jamais devem ser generalizados:
os resultados so dependentes do compilador que pode favorecer algumas construes em detrimento de outras; os resultados dependem do hardware; quando grandes quantidades de memria so utilizadas, as medidas de tempo podem depender deste aspecto.
28

Medida do Custo pela Execuo do Programa


Apesar disso, h argumentos a favor de se obterem medidas reais de tempo. Ex.: quando h vrios algoritmos distintos para resolver um mesmo tipo de problema, todos com um custo de execuo dentro de uma mesma ordem de grandeza. Assim, so considerados tanto os custos reais das operaes como os custos no aparentes, tais como alocao de memria, indexao, carga, dentre outros. 29

Medida do Custo por meio de um Modelo Matemtico


Usa um modelo matemtico baseado em um computador idealizado. Deve ser especificado o conjunto de operaes e seus custos de execues. mais usual ignorar o custo de algumas das operaes e considerar apenas as operaes mais significativas.
30

Medida do Custo por meio de um Modelo Matemtico


Ex.: algoritmos de ordenao. Consideramos o nmero de comparaes entre os elementos do conjunto a ser ordenado e ignoramos as operaes aritmticas, de atribuio e manipulaes de ndices, caso existam.
31

Conceitos Bsicos Complexidade


Anlise de algoritmos tem como objetivo melhorar, se possvel, seu desempenho e

escolher, entre os algoritmos disponveis,


o melhor.

32

Conceitos Bsicos Complexidade


Existem vrios critrios de avaliao de um algoritmo como: Quantidade de trabalho requerido; Quantidade de espao requerido; Simplicidade ; Exatido na resposta.
33

Medidas de Complexidade
A quantidade de trabalho requerido por um algoritmo no pode ser descrita simplesmente por um nmero, porque o nmero de operaes bsicas efetuadas em geral no o mesmo para qualquer entrada (depende do trabalho da entrada).
34

Medidas de Complexidade Se a complexidade tomada como mxima para qualquer entrada de dado tamanho, a complexidade chamada no pior caso ou simplesmente complexidade.

35

Medidas de Complexidade
Se entanto, levada em conta a probabilidade de ocorrncia de cada entrada de um mesmo tamanho, a complexidade chamada complexidade esperada ou complexidade mdia.
36

Funo de Complexidade
Para medir o custo de execuo de um algoritmo comum definir uma funo de custo ou funo de complexidade f. f(n) a medida do tempo necessrio para executar um algoritmo para um problema de tamanho n. Funo de complexidade de tempo: f(n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n.
37

Funo de Complexidade
Funo de complexidade de espao: f(n) mede a memria necessria para executar um algoritmo em um problema de tamanho n. Utilizaremos f para denotar uma funo de complexidade de tempo daqui para a frente. A complexidade de tempo na realidade no representa tempo diretamente, mas o nmero de vezes que determinada operao considerada relevante executada.
38

Exemplo - Maior Elemento


Considere o algoritmo para encontrar o maior elemento de um vetor de inteiros v[0..n 1], n>= 1.

public class Max { public static int max ( int v [ ] , int n) { int max = v[0] ; for ( int i = 1; i < n; i++) i f (max < v[ i ] ) max = v[ i ] ; return max;}}
39

Exemplo
Seja f uma funo de complexidade tal que f(n) o nmero de comparaes entre os elementos de v, se v contiver n elementos.
Logo f(n) = n 1, para n > 0.

Vamos provar que o algoritmo apresentado no programa acima timo.


40

Exemplo
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n>= 1, faz pelo menos n 1 comparaes. Prova: Deve ser mostrado, por meio de comparaes, que cada um dos n 1 elementos menor do que algum outro elemento.
41

Exemplo
Logo n 1 comparaes so necessrias. O teorema acima nos diz que, se o nmero de comparaes for utilizado como medida de custo, ento o mtodo max da classe Max timo.
42

Tamanho da Entrada de Dados


A medida do custo de execuo de um algoritmo depende principalmente do tamanho da entrada dos dados. comum considerar o tempo de execuo de um programa como uma funo do tamanho da entrada. Para alguns algoritmos, o custo de execuo uma funo da entrada particular dos dados, no apenas do tamanho da entrada.
43

Tamanho da Entrada de Dados


No caso do mtodo max do programa do exemplo, o custo uniforme sobre todos os problemas de tamanho n. J para um algoritmo de ordenao isso no ocorre: se os dados de entrada j estiverem quase ordenados, ento o algoritmo pode ter que trabalhar menos.

44

Melhor Caso, Pior Caso e Caso Mdio


Melhor caso: menor tempo de execuo sobre todas as entradas de tamanho n. Pior caso: maior tempo de execuo sobre todas as entradas de tamanho n. Se f uma funo de complexidade baseada na anlise de pior caso, o custo de aplicar o algoritmo nunca maior do que f(n).
45

Melhor Caso, Pior Caso e Caso Mdio


Caso mdio (ou caso esperado): mdia dos tempos de execuo de todas as entradas de tamanho n. Na anlise do caso esperado, supe-se uma distribuio de probabilidades sobre o conjunto de entradas de tamanho n e o custo mdio obtido com base nessa distribuio. A anlise do caso mdio geralmente muito mais difcil de obter do que as anlises do melhor e do pior caso 46

Exemplo - Registros de um Arquivo


Considere o problema de acessar os registros de um arquivo. Cada registro contm uma chave nica que utilizada para recuperar registros do arquivo. O problema: dada uma chave qualquer, localize o registro que contenha esta chave. O algoritmo de pesquisa mais simples o que faz a pesquisa seqencial.
47

Exemplo - Registros de um Arquivo


Seja f uma funo de complexidade tal que f(n) o nmero de registros consultados no arquivo (nmero de vezes que a chave de consulta comparada com a chave de cada registro). melhor caso: f(n) = 1 (registro procurado o primeiro consultado); pior caso: f(n) = n (registro procurado o ltimo consultado ou no est presente no arquivo); caso mdio: f(n) = (n + 1)/2.
48

Modelo RAM:
Instrues executadas uma aps a outra, sem operaes concorrentes. Instrues encontradas em computadores reais, tais como instrues aritmticas, de movimentao de dados e de controle.

Funo de Complexidade
O tempo de execuo de um algoritmo: funo de custo T, onde T(n) a medida do tempo necessrio para executar um algoritmo para um problema de tamanho n. T = funo complexidade de tempo. Se T(n) = medida de memria necessria para a execuo de um algoritmo, ento T = funo de complexidade de espao.

Funo de Complexidade
Um algoritmo nem sempre se comporta de modo uniforme, podendo identificar trs casos: Pior caso = maior tempo de execuo sobre todas as entradas de tamanho n. Melhor caso = menor tempo de execuo sobre todas as entradas de tamanho n. Caso mdio = mdia dos tempos de execuo sobre todas as entradas de tamanho n.

Tempo de Execuo
O tempo de execuo de um algoritmo aumenta proporcionalmente ao tamanho da entrada n do problema. Escolha do algoritmo pelo desempenho em entradas grandes. Estudo da eficincia assinttica.

Ordem Assintticas
A complexidade assinttica definida pelo crescimento da complexidade para entradas suficientemente grandes.

53

Introduo
As vezes no necessrio implementar um algoritmo para
verificar seu desempenho

Na maioria das vezes o que importa o desempenho do


algoritmo para n grandes
10 n2 n lg n 2n n! 100 10 1024 3.62x106 100 10.000 200 1.2x1030 ... 1.000 1.000.000 3.000 ... ... 10.000 100.000.000 40.000 ... ... 100.000 1010 5x105 ... ...

Quando observa-se o tamanho da entrada de modo a influenciar


o tempo de execuo est se estudando a eficincia asinttica do algoritmo

Elementos da Anlise Assinttica Uma funo g(n) domina assintoticamente outra funo f(n) se existem duas constantes positivas c e n0 tais que, para n n0, temos que |f(n)| c . |g(n)|.

Notao O (Omicron)
Define limite assinttico superior sobre uma funo: f(n) = O(n2) ou f(n) O(n2)

Para todos os valores n direita de n0, o valor da funo f(n) est em ou abaixo de g(n).

Verificao da Equao

n 1 2 3 4

| | c=1 1 1 2 4 3 9 4 16
57

Notao
Uma funo f(n) (g(n)) se existem duas constantes positivas c e n0 tais que c . g(n) f(n), para todo n n0. A notao define um limite assinttico inferior sobre uma funo, dentro de um fator constante.

Notao

Para todos os valores n direita de n0, o valor da funo f(n) est em ou acima de g(n).

Notao
Uma funo f(n) (g(n)) se existem constantes positivas c1, c2 e n0 tais que 0 c1 g(n) f(n) c2 . g(n), para todo n n0. A notao define um limite assinttico firme sobre uma funo.

Notao

Para todos os valores n direita de n0, o valor da funo f(n) est sobre ou acima de c1g(n) e sobre ou abaixo de c2g(n).

Notao o
Fornece um limite assinttico superior que pode ou no ser assintoticamente restrito. o(g(n)) = {f(n): para qualquer constante positiva c > 0, existe uma constante n0 > 0 tal que 0 f(n) < c g(n)} para todo n n0}.

Notao
Fornece um limite assinttico inferior que pode ou no ser assintoticamente restrito.

(g(n)) = {f(n): para qualquer constante positiva c > 0, existe uma constante n0 > 0 tal que 0 c g(n) < f(n) para todo n n0}.

Recorrncias
Uma funo que chama a si mesma dita recursiva. Pode ser exemplificada pelo fatorial de um nmero n, que para todo n 0, definido por:

Recorrncias
A anlise do tempo de execuo de um algoritmo recursivo um pouco diferente. Todo algoritmo recursivo tem um caso base, que permite finalizar a recurso. Existem mtodos de soluo de recorrncias, mostrados a seguir.

Expanso Telescpia
Segundo Rezende (2002), a idia bsica expandir a relao de recorrncia at que possa ser detectado o seu comportamento no caso geral.

rvore de Recurso
Desenhar uma rvore cujos ns representam os tamanhos dos problemas correspondentes. Considerar: a altura da rvore e o nmero de passos executados em cada nvel.

Mtodo Mster Usado como receita resolver recorrncias. para

68

Notaes, Funes e Somatrios


Monotonicidade. Pisos e tetos. Polinmios. Exponenciais. Logaritmos. Somatrios: srie aritmtica, srie geomtrica, srie geomtrica infinita, srie harmnica, somas integrais e diferenciais.

Monotonicidade
Segundo Cormen (2002), uma funo f(n) monotonicamente crescente se a<=b produz f(a)<=f(b). Do mesmo modo, ela monotonicamente descrescente se a<=b produz f(a)>=f(b).Uma funo estritamente crescente se a<b produz f (a) < f(b) e estritamente descrescente se a<b produz f(a) > f(b).
70

Pisos e Tetos
Seja x um nmero pertencente ao conjunto dos nmeros reais. Para qualquer nmero x, denota-se por |x| (piso de x) o maior inteiro menor ou igual a x. Para qualquer nmero x, denota-se por |x| (teto de x) o menor inteiro maior ou igual a x. Para todo nmero x,

X-1<|X|<= X<=|X|<X+1.
71

Polinmios
Segundo Cormen (2002), dado um inteiro no negativo d, um polinmio em n de grau d uma funo p(n) da forma

=
=

72

Exponenciais

73

Logaritmos

74

Algoritmos Eficientes
Com um algoritmo ineficiente, um computador rpido no ajuda! Suponha que uma mquina resolva um problema de tamanho N em um dado tempo. Qual tamanho de problema uma mquina 10 vezes mais rpida resolve no mesmo tempo?
75

Algoritmos Eficientes

76

Crescimento de uma funo

77

Exemplo
Esse exemplo mostra como calcular os dados da tabela acima. Suponha um algoritmo que precisa f(n) passos de execuo numa dada mquina e uma outra mquina que c vezes mais rpida. Portanto, ele capaz de executar c vezes mais passos que a primeira. Ao mesmo tempo, qual seria o tamanho de problema n0 que a nova mquina capaz de resolver? Temos
78

Exemplo
f(n0) = cf(n). Por exemplo para f(n) = log2n e c = 10 (exemplo acima), temos log2 n0 = 10 log2 n () n0 = n10. Em geral obtemos n0 = f1(cf(n)) (isso faz sentido para funes monotnicas, que tm inversa).
79

Algoritmo de ordenao por troca (BUBBLE SORT)


Compara dados armazenados em um vetor de tamanho n. Cada elemento de posio i ser comparado com o elemento de posio i+1. Quando a ordenao (crescente ou decrescente) encontrada, trocam-se as posies entre os elementos. Um lao com a quantidade de elementos do vetor ser executado (for(j=1;j<=n;j++)), e dentro deste, outro lao que percorre da primeira penltima posio do (for(i=0;i<n1;i++)).

Anlise da complexidade

Tempo de execuo do algoritmo BUBBLE SORT O(n2), pois n2 n cn2, c = 1, n 1.

Grficos de desempenho

BUBBLE SORT melhorado (1 verso)


Compara cada elemento de posio i com o de posio i1. Quando a ordenao (crescente ou decrescente) encontrada, trocam-se posies entre os elementos. Um lao com a quantidade de elementos do vetor menos um ser executado (for(j=1;j<n;j++)) e, dentro dele, outro lao que percorre da ltima posio posio j, fazendo com que as posies j ordenadas no sejam mais percorridas (for(i=n1;i>=j;i)).

Anlise da Complexidade X Tempo de Execuo


Anlise da complexidade Tempo de execuo

Grficos de desempenho

BUBBLE SORT melhorado (2 verso)


Compara-se cada elemento de posio i com o de posio i + 1 e, quando a ordenao (crescente ou decrescente) encontrada, trocam-se posies entre os dados. Um lao com a quantidade de elementos do vetor, enquanto houver trocas, ser executado (j = 1) e (while j <= n && troca == 1), e dentro dele, outro lao que percorre da primeira penltima posio do vetor (for(i=0;i<n1;i++)).

Anlise da Complexidade X Tempo de Execuo


No melhor caso: O(n) No pior caso: O(n2)
Simulador online do Bubble Sort
http://wikipedia.artudi.org/Bubble%20Sort.php

Algoritmo de ordenao por insero (INSERTION SORT)


O segundo nmero do vetor inicia as comparaes. Os elementos esquerda do nmero eleito esto sempre ordenados de forma crescente ou decrescente. Um lao com as comparaes ser executado do segundo elemento ao ltimo, ou seja, na quantidade de vezes igual ao nmero de elementos do vetor menos um (for(i=1;i<n;i++)).

Algoritmo de ordenao por insero (INSERTION SORT)


Enquanto existirem elementos esquerda do nmero eleito para comparaes e a posio que atende a ordenao que se busca no for encontrada, o lao ser executado. O nmero eleito est na posio i. Os nmeros esquerda do eleito esto nas posies de i1 a 0, logo, o lao a ser executado ser (j=i1) e (while (j>=0 && elemento[j] > eleito)).

Anlise da Complexidade X Tempo de Execuo

Grficos de desempenho

Anlise do Algoritmo Insertion Sort


Algoritmo Insertion Sort for j2 to length(A) key A[j] ij1
while i>0 and A[i]>key A[i+1] A[i]

Custo c1 c2 c3
c4 c5

Tempo n n-1 n-1

t
j 2 n

t
j 2 n

ii1
end A[i+1] key end

c6

t
j 2

c7

n-1

Anlise do Algoritmo de Insero


tj
o nmero de vezes que o lao while executado para aquele valor j entrada de tamanho n, somamos todas as partes. Tipos de Anlise:
Melhor Caso: A entrada j est ordenada, ento tj = 1.
Pior Caso: A entrada est desordenada, ento tj = j

Para calcular o tempo de execuo T(n) para uma

Caso Mdio: Mdia com base em uma distribuio


93

Anlise de Algoritmo
O custo total para a execuo do nalgoritmo ser: n T (n) c1n c2 (n 1) c3 (n 1) c4 t j c5 (t j 1)
j 2 j 2

c6 (t j 1) c7 (n 1)
j 2

No melhor caso o vetor j esta ordenado, ento o


comportamento pode ser dado por an + b, ou seja, linear.

T (n) c1n c2 (n 1) c3 (n 1) c4 (n 1) c7 (n 1) (c1 c2 c3 c4 c7 )n (c2 c3 c4 c7 )

Anlise de Algoritmo
No pior caso o vetor esta na ordem inversa, logo o while ser
executado todas as vezes

t
j 2 n j j 2

n(n 1) j 1 2
n

n(n 1) (t j 1) ( j 1) 2 j 2 j 2

n(n 1) n(n 1) T (n) c1n c2 (n 1) c3 (n 1) c4 ( 1) c5 ( ) 2 2 n(n 1) c6 ( ) c7 (n 1) 2

Anlise de Algoritmo
n(n 1) n(n 1) T (n) c1n c2 (n 1) c3 (n 1) c4 ( 1) c5 ( ) 2 2 n(n 1) c6 ( ) c7 (n 1) 2
c4 c5 c6 2 c4 c5 c6 T (n) ( )n (c1 c2 c3 c7 )n 2 2 2 2 2 2 (c2 c3 c4 c7 )
No pior caso o tempo de execuo pode ser expresso como an2 + bn + c,
logo uma funo quadrtica

Anlise de Algoritmo
Ordem ou Grau de Crescimento
o Na verdade o que interessa no tempo de execuo apenas o termo de maior grau
o Nesse caso, os custos ci e os termos de menor ordem podem ser ignorados o No exemplo abaixo, diz-se que a ordem de crescimento n2

c4 c5 c6 2 c4 c5 c6 T (n) ( )n (c1 c2 c3 c7 )n 2 2 2 2 2 2 (c2 c3 c4 c7 )


Simulador do Insertion Sort: http://wikipedia.artudi.org/Insertion%20Sort.php

Anlise de Algoritmo
O melhor caso para o Insertion Sort quando o array j est
ordenado. Neste caso a comparao no lao interno sempre falhar na primeira comparao e o tempo de execuo depender apenas do lao externo. O tempo de execuo obedecer uma funo linear e a complexidade do algoritmo ser de O (n).

O pior caso quando o array est na ordem inversa. Nesta


situao para cada iterao do lao externo, o lao interno executar n-1 vezes, onde n o valor da varivel j no lao externo. Temos que a complexidade de tempo do algoritmo neste caso ser de O (n(n-1)) = O (n2-n) = O (n2).

98

Anlise do Algoritmo de Insero


O tempo de execuo no melhor caso pode ser expresso por:
T(n) = an + b

O tempo de execuo no pior caso pode ser expresso por:


T(n) = an2+ bn + c
99

Algoritmo de ordenao por seleo (SELECTION SORT)


Cada nmero do vetor, a partir do primeiro, eleito e comparado com o menor ou maior, dependendo da ordenao desejada, nmero dentre os que esto direita do eleito. Procura-se um nmero menor (quando crescente) ou um maior (quando decrescente). O nmero eleito est na posio i. Os nmeros direita esto nas posies de i+1 a n1, sendo n o nmero de elementos do vetor. O lao a ser executado para encontrar o menor elemento direita do eleito ser (for(j=i+2;j<=n1;j++)).

Anlise da Complexidade X Tempo de Execuo


(n). Independentemente do vetor de entrada, o algoritmo se comportar da mesma maneira.

Grficos de desempenho

Algoritmo de ordenao por intercalao (MERGE SORT)


O vetor dividido em vetores com a metade do tamanho do original por um procedimento recursivo, at que o vetor fique com apenas um elemento e estes sejam ordenados e intercalados. aplicada a tcnica da diviso e conquista. - Dividir : dividir a sequncia de n em duas subsequncias de n/2 elementos cada. - Conquistar: ordenar as duas subsequncias recursivamente utilizando a ordenao por intercalao. - Combinar: intercalar as duas subsequncias ordenadas para produzir a soluo.

Anlise da Complexidade X Tempo de Execuo

Tempo de execuo:T(n) = (nlog n).

Grficos de desempenho

Algoritmos de ordenao rpida (QUICK SORT)


O vetor particionado em dois por meio de um procedimento recursivo at que o vetor fique com apenas um elemento, enquanto os demais ficam ordenados medida que ocorre o particionamento. Tambm baseado na tcnica da diviso e conquista, descrita a seguir.

Algoritmos de ordenao rpida (QUICK SORT)


- Dividir: o vetor X[p..r] particionado em dois subvetores no vazios X[p..q] e X[q+1..r], tais que cada elemento de X[p..q] menor ou igual a cada elemento de X[q+1..r]. Para determinar o ndice q, escolhe-se o elemento que se encontra na metade do vetor original, chamado de piv, e rearranjam-se os elementos do vetor de forma que os da esquerda de q so menores (ou iguais) e os da direita so maiores (ou iguais) ao piv. - Conquistar: os dois subvetores so ordenados X[p..q] e X[q+1..r] por chamadas recursivas ao QUICK SORT. - Combinar: os elementos vo sendo ordenados no prprio vetor, sem processamento nesta etapa.

Anlise da complexidade

Tempo de execuo T(n) = (n. log n).

Grfico de desempenho

Algoritmo de ordenao (HEAP SORT)


Baseado na estrutura de dados HEAP vetor (X) que pode ser visto como uma rvore binria completa, onde cada n possui no mximo 2 filhos. Cada vrtice corresponde a um elemento do vetor. A rvore completamente preenchida exceto no ltimo nvel. Cada nvel sempre preenchido da direita para a esquerda. Para todo vrtice i diferente da raiz, a seguinte propriedade deve ser vlida: X[Pai(i)] X[i]. Dado um ndice i, para se descobrir as posies do pai, do filho esquerdo e do direito, realizam-se os clculos: Pai(i) = i/2 , Filho Esquerdo(i) = 2*i e Filho Direito(i) = 2*i + 1.

Anlise da complexidade
Antes, analisar a complexidade de heap_fica e transforma_heap.

O tempo no ultrapassa n.log n.

Grficos de desempenho

Algoritmo de busca sequencial


Em um vetor no ordenado, ser buscado o nmero at que seja encontrado ou at se chegar ao final do vetor. Em um vetor ordenado, ser buscado o nmero at que seja encontrado e enquanto for maior que o nmero do vetor.

Vetor no ordenado

Anlise da complexidade

Vetor ordenado
O tempo de execuo Pior caso: T(n) = O(n). Melhor caso: T(n) = O(1). O tempo de execuo Pior caso: T(n) = O(n). Melhor caso: T(n) = O(1).

Algoritmo de busca binria


O vetor com os dados dividido ao meio e o nmero do meio comparado com o nmero procurado. Se iguais, a busca termina; se menor que o do meio, a busca ser realizada no vetor esquerda. Se maior que o do meio, ser realizada no vetor direita.

Anlise da complexidade

O consumo de tempo proporcional a lg n.

Das könnte Ihnen auch gefallen