Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A...

65
Projeto e An ´ alise de Algoritmos A. G. Silva 02 de marc ¸o de 2018

Transcript of Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A...

Page 1: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Projeto e Analise de Algoritmos

A. G. Silva

02 de marco de 2018

Page 2: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Disciplina

INE410104 – Projeto e Analise de Algoritmos

Professor: Alexandre Goncalves Silvahttps://www.inf.ufsc.br/˜alexandre.goncalves.silva/[email protected]

Sala INE-506

Carga horaria: 60 horas-aula (4 creditos)Curso: Programa de Pos-Graduacao em Ciencia daComputacaoRequisitos: nao haPerıodo: 1o semestre de 2018Materiais:

https://moodle.ufsc.br/course/view.php?id=86937 (M/D)Horarios:

6a 08h20-11h50 (4 aulas) - Sala 105 (auditorio)

Page 3: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Ementa

Introducao a analise e projeto de algoritmos; Complexidade;Notacao assintotica; Recorrencias; Algoritmos de divisao econquista; Algoritmos Gulosos; Programacao Dinamica;Problemas NP- Completos; Reducoes; Tecnicas para tratarproblemas complexos

Page 4: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Objetivos

Geral: Compreender o processo de analise decomplexidade de algoritmos e conhecer as principaistecnicas para o desenvolvimento de algoritmos, aplicacoese analises de complexidade.

Especıficos: • Compreender o processo de analise decomplexidade de algoritmos • Conhecer as principaistecnicas para o desenvolvimento de algoritmos e suasanalises • Compreender a diferenca entre complexidadede problemas e complexidade de solucoes • Conhecer ecompreender as classes de complexidade de problemas• Conhecer algoritmos para tratar problemas complexos

Page 5: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Conteudo programatico

Introducao (4 horas/aula)

Notacao Assintotica e Crescimento de Funcoes (4horas/aula)Recorrencias (4 horas/aula)Divisao e Conquista (12 horas/aula)Buscas (4 horas/aula)Grafos (4 horas/aula)Algoritmos Gulosos (8 horas aula)Programacao Dinamica (8 horas/aula)NP-Completude e Reducoes (6 horas/aula)Algoritmos Aproximados e Busca Heurıstica (6 horas/aula)

Page 6: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Metodologia e avaliacao

Metodologia:Aulas expositivas, resolucao de problemas, leituras extraclassee trabalho de pesquisa.

Avaliacao:O aluno sera aprovado na disciplina se obtiver Nota Final (NF )igual ou superior a 7,0 e frequencia igual ou superior a 75%. ANF sera calculada pela formula:

NF = 0,6P1 + P2

2+ 0,2

L1 + L2

2+ 0,2T

onde P1 e P2 sao provas, L1 e L2 sao listas de exercıcios, e T eo trabalho de pesquisa, apresentado por meio de um artigocientıfico

Page 7: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Cronograma

02mar – Apresentacao da disciplina. Introducao.

09mar – Prova de proficiencia/dispensa.16mar – Notacao assintotica. Recorrencias.23mar – Dia nao letivo. Exercıcios.30mar – Dia nao letivo. Exercıcios.06abr – Recorrencias. Divisao e conquista.13abr – Divisao e conquista. Ordenacao.20abr – Ordenacao em tempo linear. Divisao e conquista. Estatıstica de ordem.27abr – Primeira avaliacao.04mai – Buscas. Grafos.11mai – Algoritmos gulosos.18mai – Algoritmos gulosos.25mai – Programacao dinamica.01jun – Dia nao letivo. Exercıcios.08jun – Programacao dinamica.15jun – NP-Completude e reducoes.22jun – Exercıcios (copa).29jun – Segunda avaliacao.jul – Algoritmos aproximados e busca heurıstica. Desenvolvimento do trabalhode pesquisa.

Page 8: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Bibliografia

Basica:T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein ,Introduction to Algorithms. 3rd edition, The MIT Press,2009.

S. Dasgupta, C.H. Papadimitriou, U.V. Vazirani, Algorithms,1st edition, McGraw-Hill, 2006.Jon Kleinberg, Eva Tardos, Algorithm Design, 1st edition,Pearson, 2005.

Page 9: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Bibliografia (cont...)

Complementar:N.C. Ziviani, Projeto de Algoritmos com Implementacoesem Java e C++, Thompson Learning, 2007.H.R. Lewis, C.H. Papadimitriou, Elementos de Teoria daComputacao, 2 a Edicao, Bookman, 2000.T.A. Sudkamp, Languages and Machines, Addison-Wesley,1988.Artigos selecionados

Page 10: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Introducao

O que veremos nesta disciplina?

Como provar a “corretude” de um algoritmo

Estimar a quantidade de recursos (tempo, memoria) deum algoritmo = analise de complexidade

Tecnicas e ideias gerais de projeto de algoritmos: inducao,divisao-e-conquista, programacao dinamica, algoritmosgulosos etc

Tema recorrente: natureza recursiva de varios problemas

A dificuldade intrınseca de varios problemas: inexistenciade solucoes eficientes

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 11: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Algoritmos

O que e um algoritmo (computacional) ?

Informalmente, um algoritmo e um procedimentocomputacional bem definido que:

recebe um conjunto de valores como entrada,

produz um conjunto de valores como saıda,

atraves de uma sequencia de passos em um modelocomputacional.

Equivalentemente, um algoritmo e uma ferramenta pararesolver um problema computacional. Este problema define arelacao precisa que deve existir entre a entrada e a saıda doalgoritmo.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 12: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Exemplos de problemas: teste de primalidade

Problema: determinar se um dado numero e primo.

Exemplo:

Entrada: 9411461

Saıda: E primo.

Exemplo:

Entrada: 8411461

Saıda: Nao e primo.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 13: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Exemplos de problemas: ordenacao

Definicao: um vetor A[1 . . . n] e crescente se A[1] ≤ . . . ≤ A[n].

Problema: rearranjar um vetor A[1 . . . n] de modo que fiquecrescente.

Entrada:

1 n33 55 33 44 33 22 11 99 22 55 77

Saıda:

1 n11 22 22 33 33 33 44 55 55 77 99

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 14: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Instancia de um problema

Uma instancia de um problema e um conjunto de valores queserve de entrada para esse.

Exemplo:Os numeros 9411461 e 8411461 sao instancias do problemade primalidade.

Exemplo:O vetor

1 n33 55 33 44 33 22 11 99 22 55 77

e uma instancia do problema de ordenacao.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 15: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

A importancia dos algoritmos para a computacao

Exemplos de aplicacoes para o uso/desenvolvimento dealgoritmos “eficientes”?

projetos de genoma de seres vivos

rede mundial de computadores

comercio eletronico

planejamento da producao de industrias

logıstica de distribuicao

computacao cientıfica, imagens medicas

games e filmes, ...

Page 16: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Dificuldade intrınseca de problemas

Infelizmente, existem certos problemas para os quais naose conhece algoritmos eficientes capazes de resolve-los.Exemplos sao os problemas NP-completos.

Curiosamente, nao foi provado que tais algoritmos naoexistem! Interprete isso como um desafio para inteligenciahumana.

Esses problemas tem a caracterıstica notavel de que seum deles admitir um algoritmo “eficiente” entao todosadmitem algoritmos “eficientes”.

Por que devo me preocupar com problemasNP-sei-la-o-que?

Problemas dessa classe surgem em inumeras situacoespraticas, como problemas NP-difıceis.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 17: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Dificuldade intrınseca de problemas

Exemplo de problema NP-difıcil: calcular as rotas doscaminhoes de entrega de uma distribuidora de bebidas em SaoPaulo, minimizando a distancia percorrida. (vehicle routing)

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 18: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Dificuldade intrınseca de problemas

Exemplo de problema NP-difıcil: calcular o numero mınimo decontainers para transportar um conjunto de caixas comprodutos. (bin packing 3D)

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 19: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Dificuldade intrınseca de problemas

Exemplo de problema NP-difıcil: calcular a localizacao e onumero mınimo de antenas de celulares para garantir acobertura de uma certa regiao geografica. (facility location)

e muito mais. . .

E importante saber indentificar quando estamos lidando comum problema NP-difıcil!

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 20: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Algoritmos e tecnologia

Condicao ideal (irreal): os computadores tem velocidadede processamento e memoria infinita. Neste caso,qualquer algoritmo e igualmente bom e esta disciplina einutil!

O mundo real: ha computadores com velocidade deprocessamento na ordem de bilhoes de instrucoes porsegundo e trilhoes de bytes em memoria.

Mas ainda assim temos uma limitacao na velocidade deprocessamento e memoria dos computadores.

Neste caso faz muita diferenca ter um bom algoritmo.

Page 21: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Algoritmos e tecnologia

Exemplo: ordenacao de um vetor de n elementos

Suponha que os computadores A e B executam1G e 10M instrucoes por segundo, respectivamente.Ou seja, A e 100 vezes mais rapido que B.

Algoritmo 1: implementado em A por um excelenteprogramador em linguagem de maquina (ultra-rapida).Executa 2n2 instrucoes.

Algoritmo 2: implementado na maquina B por umprogramador mediano em linguagem de alto nıveldispondo de um compilador “meia-boca”.Executa 50n log n instrucoes.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 22: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Algoritmos e tecnologia

O que acontece quando ordenamos um vetor de ummilhao de elementos? Qual algoritmo e mais rapido?

Algoritmo 1 na maquina A:2.(106)2 instrucoes

109 instrucoes/segundo ≈ 2000 segundos

Algoritmo 2 na maquina B:50.(106 log 106) instrucoes107 instrucoes/segundo ≈ 100 segundos

Ou seja, B foi VINTE VEZES mais rapido do que A!

Se o vetor tiver 10 milhoes de elementos, esta razao serade 2.3 dias para 20 minutos!

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Entenda log(·) como

sendo log2(·) ou lg(·)

Page 23: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Algoritmos e tecnologia

E se tivermos os tais problemas NP-difıceis ?

f (n) n = 20 n = 40 n = 60 n = 80 n = 100n 2,0×10−11seg 4,0×10−11seg 6,0×10−11seg 8,0×10−11seg 1,0×10−10segn2 4,0×10−10seg 1,6×10−9seg 3,6×10−9seg 6,4×10−9seg 1,0×10−8segn3 8,0×10−9seg 6,4×10−8seg 2,2×10−7seg 5,1×10−7seg 1,0×10−6segn5 2,2×10−6seg 1,0×10−4seg 7,8×10−4seg 3,3×10−3seg 1,0×10−2seg2n 1,0×10−6seg 1,0seg 13,3dias 1,3×105sec 1,4×1011sec3n 3,4×10−3seg 140,7dias 1,3×107sec 1,7×1019sec 5,9×1028sec

Supondo um computador com velocidade de 1 Terahertz (milvezes mais rapido que um computador de 1 Gigahertz).

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 24: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento
Page 25: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Algoritmos e tecnologia – Conclusoes

O uso de um algoritmo adequado pode levar a ganhosextraordinarios de desempenho.

Isso pode ser tao importante quanto o projeto dehardware.

A melhora obtida pode ser tao significativa que naopoderia ser obtida simplesmente com o avanco datecnologia.

As melhorias nos algoritmos produzem avancos em outrascomponentes basicas das aplicacoes (pense noscompiladores, buscadores na internet, etc).

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 26: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Descricao de algoritmos

Podemos descrever um algoritmo de varias maneiras:

usando uma linguagem de programacao de alto nıvel: C,Pascal, Java etcimplementando-o em linguagem de maquina diretamenteexecutavel em hardwareem portuguesem um pseudo-codigo de alto nıvel, como no livro doCLRS

Usaremos essencialmente as duas ultimas alternativas nestadisciplina.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 27: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Exemplo de pseudo-codigo

Algoritmo ORDENA-POR-INSERCAO: rearranja um vetorA[1 . . . n] de modo que fique crescente.

ORDENA-POR-INSERCAO(A,n)1 para j ← 2 ate n faca2 chave← A[j]3 B Insere A[j] no subvetor ordenado A[1 . . . j−1]4 i ← j − 15 enquanto i ≥ 1 e A[i] > chave faca6 A[i + 1]← A[i]7 i ← i − 18 A[i + 1]← chave

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 28: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Corretude de algoritmos

Um algoritmo (que resolve um determinado problema) edeterminıstico se, para toda instancia do problema, elepara e devolve uma resposta correta.

Algoritmos probabilısticos sao algoritmos que utilizampassos probabilısticos (como obter um numero aleatorio).Estes algoritmos podem errar ou gastar muito tempo, masneste caso, queremos que a probabilidade de errar ou deexecutar por muito tempo seja muuuuito pequena.

O curso sera focado principalmente em algoritmosdeterminısticos, mas veremos alguns exemplos dealgoritmos probabilısticos.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 29: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Complexidade de algoritmos

Em geral, nao basta saber que um dado algoritmo para.Se ele for muito leeeeeeeeeeeento tera pouca utilidade.Queremos projetar/desenvolver algoritmos eficientes(rapidos).Mas o que seria uma boa medida de eficiencia de umalgoritmo?Nao estamos interessados em quem programou, em quelinguagem foi escrito e nem qual a maquina foi usada!Queremos um criterio uniforme para comparar algoritmos.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 30: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Modelo Computacional

Uma possibilidade e definir um modelo computacional deum maquina.O modelo computacional estabelece quais os recursosdisponıveis, as instrucoes basicas e quanto elas custam(= tempo).Dentre desse modelo, podemos estimar atraves de umaanalise matematica o tempo que um algoritmo gasta emfuncao do tamanho da entrada(= analise de complexidade).A analise de complexidade depende sempre do modelocomputacional adotado.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 31: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Maquinas RAM

Salvo mencionado o contrario, usaremos o Modelo AbstratoRAM (Random Access Machine):

simula maquinas convencionais (de verdade),possui um unico processador que executa instrucoessequencialmente,tipos basicos sao numeros inteiros e reais,ha um limite no tamanho de cada palavra de memoria: sea entrada tem “tamanho” n, entao cada inteiro/real erepresentado por c log n bits onde c ≥ 1 e uma contante.Note que nao podemos representar numeros reais, amenos de aproximacoes. Assim, nao poderemosrepresentar π,

√2 etc, de maneira exata.

Isto e razoavel?

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 32: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Maquinas RAM

executa operacoes aritmeticas (soma, subtracao,multiplicacao, divisao, piso, teto), comparacoes,movimentacao de dados de tipo basico e fluxo de controle(teste if/else, chamada e retorno de rotinas) em tempoconstante,Certas operacoes ficam em uma zona cinza, por exemplo,exponenciacao,veja maiores detalhes do modelo RAM no CLRS.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 33: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Tamanho da entrada

Problema: Primalidade

Entrada: inteiro n

Tamanho: numero de bits de n ≈ lg n = log2 n

Problema: Ordenacao

Entrada: vetor A[1 . . . n]

Tamanho: n lg U onde U e o maior numero em A[1 . . . n]

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 34: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Medida de complexidade e eficiencia de algoritmos

A complexidade de tempo (= eficiencia) de um algoritmo eo numero de instrucoes basicas que ele executa emfuncao do tamanho da entrada.Adota-se uma “atitude pessimista” e faz-se uma analise depior caso.Determina-se o tempo maximo necessario para resolveruma instancia de um certo tamanho.Alem disso, a analise concentra-se no comportamento doalgoritmo para entradas de tamanho GRANDE = analiseassintotica.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 35: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Medida de complexidade e eficiencia de algoritmos

Um algoritmo e chamado eficiente se a funcao que medesua complexidade de tempo e limitada por um polinomiono tamanho da entrada.Por exemplo: n, 3n − 7, 4n2, 143n2 − 4n + 2, n5.Mas por que polinomios?Resposta padrao: (polinomios sao funcoes bem“comportadas”).

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 36: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Vantagens do metodo de analise proposto

O modelo RAM e robusto e permite prever ocomportamento de um algoritmo para instanciasGRANDES.O modelo permite comparar algoritmos que resolvem ummesmo problema.A analise e mais robustas em relacao as evolucoestecnologicas .

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 37: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Desvantagens do metodo de analise proposto

Fornece um limite de complexidade pessimista sempreconsiderando o pior caso.Em uma aplicacao real, nem todas as instancias ocorremcom a mesma frequencia e e possıvel que as “instanciasruins” ocorram raramente.Nao fornece nenhuma informacao sobre o comportamentodo algoritmo no caso medio.A analise de complexidade de algoritmos no caso medio ecomplicada e depende do conhecimento da distribuicaodas instancias.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 38: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Comecando a trabalhar

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 39: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Ordenacao

Problema: ordenar um vetor em ordem crescente

Entrada: um vetor A[1 . . . n]

Saıda: vetor A[1 . . . n] rearranjado em ordem crescente

Vamos comecar estudando o algoritmo de ordenacao baseadono metodo de insercao.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 40: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Insercao em um vetor ordenado

1 j n20 25 35 40 44 55 38 99 10 65 50

O subvetor A[1 . . . j − 1] esta ordenado.Queremos inserir a chave = 38 = A[j] em A[1 . . . j − 1] demodo que no final tenhamos:

1 j n20 25 35 38 40 44 55 99 10 65 50

Agora A[1 . . . j] esta ordenado.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 41: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Como fazer a insercao

chave = 381 i j n

20 25 35 40 44 55 38 99 10 65 50

1 i j n20 25 35 40 44 55 99 10 65 50

1 i j n20 25 35 40 44 55 99 10 65 50

1 i j n20 25 35 40 44 55 99 10 65 50

1 i j n20 25 35 38 40 44 55 99 10 65 50

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 42: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Ordenacao por insercaochave 1 j n

99 20 25 35 38 40 44 55 99 10 65 50

chave 1 j n99 20 25 35 38 40 44 55 99 10 65 50

chave 1 j n10 20 25 35 38 40 44 55 99 10 65 50

chave 1 j n10 10 20 25 35 38 40 44 55 99 65 50

chave 1 j n65 10 20 25 35 38 40 44 55 65 99 50

chave 1 j50 10 20 25 35 38 40 44 50 55 65 99

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 43: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Ordenacao por insercao

chave 1 j n99 20 25 35 38 40 44 55 99 10 65 50

chave 1 j n10 10 20 25 35 38 40 44 55 99 65 50

chave 1 j n65 10 20 25 35 38 40 44 55 99 65 50

chave 1 j n65 10 20 25 35 38 40 44 55 65 99 50

chave 1 j50 10 20 25 35 38 40 44 55 65 99 50

chave 1 j50 10 20 25 35 38 40 44 50 55 65 99

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 44: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Ordena-Por-Insercao

Pseudo-codigo

ORDENA-POR-INSERCAO(A,n)1 para j ← 2 ate n faca2 chave← A[j]3 B Insere A[j] no subvetor ordenado A[1..j − 1]4 i ← j − 15 enquanto i ≥ 1 e A[i] > chave faca6 A[i + 1]← A[i]7 i ← i − 18 A[i + 1]← chave

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 45: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Analise do algoritmo

O que e importante analisar ?

Finitude: o algoritmo para?Corretude: o algoritmo faz o que promete?Complexidade de tempo: quantas intrucoes saonecessarias no pior caso para ordenar os n elementos?

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 46: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

O algoritmo para

ORDENA-POR-INSERCAO(A,n)1 para j ← 2 ate n faca

. . .4 i ← j − 15 enquanto i ≥ 1 e A[i] > chave faca6 . . .7 i ← i − 18 . . .No laco enquanto na linha 5 o valor de i diminui a cadaiteracao e o valor inicial e i = j − 1 ≥ 1. Logo, a sua execucaopara em algum momento por causa do teste condicional i ≥ 1.

O laco na linha 1 evidentemente para (o contador j atingira ovalor n + 1 apos n − 1 iteracoes).

Portanto, o algoritmo para.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 47: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Ordena-Por-Insercao

ORDENA-POR-INSERCAO(A,n)1 para j ← 2 ate n faca2 chave← A[j]3 B Insere A[j] no subvetor ordenado A[1..j − 1]4 i ← j − 15 enquanto i ≥ 1 e A[i] > chave faca6 A[i + 1]← A[i]7 i ← i − 18 A[i + 1]← chave

O que falta fazer ?Verificar se ele produz uma resposta correta.Analisar sua complexidade de tempo.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 48: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Invariantes de laco e provas de corretude

Definicao: um invariante de um laco e uma propriedadeque relaciona as variaveis do algoritmo a cada execucaocompleta do laco.Ele deve ser escolhido de modo que, ao termino do laco,tenha-se uma propriedade util para mostrar a corretude doalgoritmo.A prova de corretude de um algoritmo requer que sejamencontrados e provados invariantes dos varios lacos que ocompoem.Em geral, e mais difıcil descobrir um invariante apropriadodo que mostrar sua validade se ele for dado de bandeja. . .

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 49: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Exemplo de invariante

ORDENA-POR-INSERCAO(A,n)1 para j ← 2 ate n faca2 chave← A[j]3 B Insere A[j] no subvetor ordenado A[1..j − 1]4 i ← j − 15 enquanto i ≥ 1 e A[i] > chave faca6 A[i + 1]← A[i]7 i ← i − 18 A[i + 1]← chave

Invariante principal de ORDENA-POR-INSERCAO: (i1)No comeco de cada iteracao do laco para das linha 1–8, osubvetor A[1 . . . j − 1] esta ordenado.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 50: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Corretude de algoritmos por invariantes

A estrategia “tıpica” para mostrar a corretude de um algoritmoiterativo atraves de invariantes segue os seguintes passos:

1 Mostre que o invariante vale no inıcio da primeira iteracao(trivial, em geral)

2 Suponha que o invariante vale no inıcio de uma iteracaoqualquer e prove que ele vale no ınicio da proxima iteracao

3 Conclua que se o algoritmo para e o invariante vale noınicio da ultima iteracao, entao o algoritmo e correto.

Note que (1) e (2) implicam que o invariante vale no inıciode qualquer iteracao do algoritmo. Isto e similar ao metodode inducao matematica ou inducao finita!

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 51: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Corretude da ordenacao por insercao

Vamos verificar a corretude do algoritmo de ordenacao porinsercao usando a tecnica de prova por invariantes de lacos.

Invariante principal: (i1)No comeco de cada iteracao do laco para das linhas 1–8, osubvetor A[1 . . . j − 1] esta ordenado.

1 j n20 25 35 40 44 55 38 99 10 65 50

Suponha que o invariante vale.Entao a corretude do algoritmo e “evidente”. Por que?No ınicio da ultima iteracao temos j= n + 1. Assim, doinvariante segue que o (sub)vetor A[1 . . . n] esta ordenado!

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 52: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Melhorando a argumentacao

ORDENA-POR-INSERCAO(A,n)1 para j ← 2 ate n faca2 chave← A[j]3 B Insere A[j] no subvetor ordenado A[1 . . . j − 1]4 i ← j − 15 enquanto i ≥ 1 e A[i] > chave faca6 A[i + 1]← A[i]7 i ← i − 18 A[i + 1]← chave

Um invariante mais preciso: (i1’)No comeco de cada iteracao do laco para das linhas 1–8, osubvetor A[1 . . . j − 1] e uma permutacao ordenada do subvetororiginal A[1 . . . j − 1].

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 53: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Esboco da demonstracao de (i1’)

1 Validade na primeira iteracao: neste caso, temos j = 2 e oinvariante simplesmente afirma que A[1 . . . 1] estaordenado, o que e evidente.

2 Validade de uma iteracao para a seguinte: segue dadiscussao anterior. O algoritmo empurra os elementosmaiores que a chave para seus lugares corretos e ela ecolocada no espaco vazio.Uma demonstracao mais formal deste fato exigeinvariantes auxiliares para o laco interno enquanto.

3 Corretude do algoritmo: na ultima iteracao, temosj = n + 1 e logo A[1 . . . n] esta ordenado com os elementosoriginais do vetor. Portanto, o algoritmo e correto.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 54: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Invariantes auxiliares

No inıcio da linha 5 valem os seguintes invariantes:

(i2) A[1 . . . i], chave e A[i + 2 . . . j] contem os elementos deA[1 . . . j] antes de entrar no laco que comeca na linha 5.

(i3) A[1 . . . i] e A[i + 2 . . . j] sao crescentes.(i4) A[1 . . . i] ≤ A[i + 2 . . . j](i5) A[i + 2 . . . j] > chave.

Invariantes (i2) a (i5)+condicao de parada na linha 5+atribuicao da linha 7

=⇒ invariante (i1’)

Demonstracao? Mesma que antes.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 55: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Complexidade do algoritmo

Vamos tentar determinar o tempo de execucao (oucomplexidade de tempo) de ORDENA-POR-INSERCAO emfuncao do tamanho de entrada.Para o problema de Ordenacao vamos usar comotamanho de entrada a dimensao do vetor e ignorar ovalores dos seus elementos (modelo RAM).A complexidade de tempo de um algoritmo e o numero deinstrucoes basicas (operacoes elementares ou primitivas)que executa a partir de uma entrada.Exemplo: comparacao e atribuicao entre numeros ouvariaveis numericas, operacoes aritmeticas, etc.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 56: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Vamos contar ?

ORDENA-POR-INSERCAO(A,n) Custo # execucoes1 para j ← 2 ate n faca c1 ?2 chave← A[j] c2 ?3 B Insere A[j] em A[1 . . . j − 1] 0 ?4 i ← j − 1 c4 ?5 enquanto i ≥ 1 e A[i] > chave faca c5 ?6 A[i + 1]← A[i] c6 ?7 i ← i − 1 c7 ?8 A[i + 1]← chave c8 ?

A constante ck representa o custo (tempo) de cada execucaoda linha k .

Denote por tj o numero de vezes que o teste no lacoenquanto na linha 5 e feito para aquele valor de j .

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 57: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Vamos contar ?

ORDENA-POR-INSERCAO(A,n) Custo Vezes1 para j ← 2 ate n faca c1 n2 chave← A[j] c2 n − 13 B Insere A[j] em A[1 . . . j − 1] 0 n − 14 i ← j − 1 c4 n − 15 enquanto i ≥ 1 e A[i] > chave faca c5

∑nj=2 tj

6 A[i + 1]← A[i] c6∑n

j=2(tj − 1)

7 i ← i − 1 c7∑n

j=2(tj − 1)

8 A[i + 1]← chave c8 n − 1

A constante ck representa o custo (tempo) de cada execucaoda linha k .

Denote por tj o numero de vezes que o teste no lacoenquanto na linha 5 e feito para aquele valor de j .

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 58: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Tempo de execucao total

Logo, o tempo total de execucao T (n) de Ordena-Por-Insercaoe a soma dos tempos de execucao de cada uma das linhas doalgoritmo, ou seja:

T (n) = c1n + c2(n − 1) + c4(n − 1) + c5∑n

j=2 tj+ c6

∑nj=2(tj − 1) + c7

∑nj=2(tj − 1)

+ c8(n − 1)

Como se ve, entradas de tamanho igual (i.e., mesmo valor den), podem apresentar tempos de execucao diferentes ja que ovalor de T (n) depende dos valores dos tj .

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 59: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Melhor caso

O melhor caso de Ordena-Por-Insercao ocorre quando o vetorA ja esta ordenado. Para j = 2, . . . ,n temos A[i] ≤ chave nalinha 5 quando i = j − 1. Assim, tj = 1 para j = 2, . . . ,n.

Logo,

T (n) = c1n + c2(n − 1) + c4(n − 1) + c5(n − 1) + c8(n − 1)= (c1 + c2 + c4 + c5 + c8)n − (c2 + c4 + c5 + c8)

Este tempo de execucao e da forma an + b para constantes ae b que dependem apenas dos ci .

Portanto, no melhor caso, o tempo de execucao e umafuncao linear no tamanho da entrada.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 60: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Pior Caso

Quando o vetor A esta em ordem decrescente, ocorre o piorcaso para Ordena-Por-Insercao. Para inserir a chave emA[1 . . . j − 1], temos que compara-la com todos os elementosneste subvetor. Assim, tj = j para j = 2, . . . ,n.

Lembre-se que:n∑

j=2

j =n(n + 1)

2− 1

en∑

j=2

(j − 1) =n(n − 1)

2.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 61: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Pior caso – continuacao

Temos entao que

T (n) = c1n + c2(n − 1) + c4(n − 1) + c5

(n(n + 1)

2− 1)

+ c6

(n(n − 1)

2

)+ c7

(n(n − 1)

2

)+ c8(n − 1)

=(c5

2+

c6

2+

c7

2

)n2 +

(c1 + c2 + c4 +

c5

2− c6

2− c7

2+ c8

)n

− (c2 + c4 + c5 + c8)

O tempo de execucao no pior caso e da forma an2 + bn + conde a,b, c sao constantes que dependem apenas dos ci .

Portanto, no pior caso, o tempo de execucao e uma funcaoquadratica no tamanho da entrada.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 62: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Complexidade assintotica de algoritmos

Como dito anteriormente, na maior parte desta disciplina,estaremos nos concentrando na analise de pior caso eno comportamento assintotico dos algoritmos(instancias de tamanho grande).O algoritmo Ordena-Por-Insercao tem como complexidade(de pior caso) uma funcao quadratica an2 + bn + c, ondea,b, c sao constantes absolutas que dependem apenasdos custos ci .O estudo assintotico nos permite “jogar para debaixo dotapete” os valores destas constantes, i.e., aquilo queindepende do tamanho da entrada (neste caso os valoresde a, b e c).Por que podemos fazer isso ?

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 63: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento
Page 64: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Notacao assintotica

Usando notacao assintotica, dizemos que o algoritmoOrdena-Por-Insercao tem complexidade de tempo de piorcaso Θ(n2).Isto quer dizer duas coisas:

a complexidade de tempo e limitada (superiormente)assintoticamente por algum polinomio da forma an2 paraalguma constante a,para todo n suficientemente grande, existe algumainstancia de tamanho n que consome tempo pelo menosdn2, para alguma contante positiva d .

Mais adiante discutiremos em detalhes o uso da notacaoassintotica em analise de algoritmos.

C. de Souza, C. da Silva, O. Lee, P. Rezende, F. Miyazawa MO417 — Complexidade de Algoritmos – v. fkm10s2

Page 65: Projeto e Análise de Algoritmosalexandre.goncalves.silva/courses/18s1/ine410104… · A importancia dos algoritmos para a computac¸ˆ ao˜ Exemplos de aplicac¸oes para o uso/desenvolvimento

Agradecimentos

Esses slides sao fruto de um trabalho iniciado pelos Profs.Cid C. de Souza e Candida N. da Silva. Desde entao,varias partes foram motificadas, melhoradas ou colocadasao gosto particular de cada docente. Em particular pelosProfs. Orlando Lee, Pedro J. de Rezende, Flavio K.Miyazawa e, mais recentemente, peloProf. Alexandre. G. Silva.Varios outros professores colaboraram direta ouindiretamente para a preparacao do material dessesslides. Agradecemos, especialmente (em ordemalfabetica): Celia P. de Mello, Jose C. de Pina, PauloFeofiloff, Ricardo Dahab e Zanoni Dias.Como foram feitas modificacoes de conteudo teorico efilosofico, os erros/imprecisoes que se encontram nestaversao devem ser comunicados [email protected].