MO417 Complexidade de Algoritmos Ilee/mo417/introducao.pdf · MO417—ComplexidadedeAlgoritmosI...

Post on 10-Aug-2020

3 views 0 download

Transcript of MO417 Complexidade de Algoritmos Ilee/mo417/introducao.pdf · MO417—ComplexidadedeAlgoritmosI...

MO417 — Complexidade de Algoritmos I

Cid C. de Souza Candida N. da Silva Orlando Lee

14 de agosto de 2018

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Antes de mais nada. . .

Uma versao anterior deste conjunto de slides foi preparada porCid Carvalho de Souza e Candida Nunes da Silva para umainstancia anterior desta disciplina.

O que voces tem em maos e uma versao modificada preparadapara atender a meus gostos.

Nunca e demais enfatizar que o material e apenas um guia enao deve ser usado como unica fonte de estudo. Para issoconsultem a bibliografia (em especial o CLR ou CLRS).

Orlando Lee

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Agradecimentos (Cid e Candida)

Varias pessoas contribuıram direta ou indiretamente com apreparacao deste material.

Algumas destas pessoas cederam gentilmente seus arquivosdigitais enquanto outras cederam gentilmente o seu tempofazendo correcoes e dando sugestoes.

Uma lista destes “colaboradores” (em ordem alfabetica) edada abaixo:

Celia Picinin de MelloJose Coelho de PinaOrlando LeePaulo FeofiloffPedro RezendeRicardo DahabZanoni Dias

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Introducao

O que veremos nesta disciplina?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Introducao

O que veremos nesta disciplina?

Como provar a “corretude” de um algoritmo

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Introducao

O que veremos nesta disciplina?

Como provar a “corretude” de um algoritmo

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Introducao

O que veremos nesta disciplina?

Como provar a “corretude” de um algoritmo

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

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Introducao

O que veremos nesta disciplina?

Como provar a “corretude” de um algoritmo

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

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

Tema recorrente: natureza recursiva de varios problemas

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Introducao

O que veremos nesta disciplina?

Como provar a “corretude” de um algoritmo

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

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

Tema recorrente: natureza recursiva de varios problemas

A dificuldade intrınseca de varios problemas: inexistencia desolucoes eficientes

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos

O que e um algoritmo?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos

O que e um algoritmo?

Informalmente, um algoritmo e um procedimento computacionalbem definido que:

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos

O que e um algoritmo?

Informalmente, um algoritmo e um procedimento computacionalbem definido que:

recebe um conjunto de valores como entrada e

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos

O que e um algoritmo?

Informalmente, um algoritmo e um procedimento computacionalbem definido que:

recebe um conjunto de valores como entrada e

produz um conjunto de valores como saıda.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos

O que e um algoritmo?

Informalmente, um algoritmo e um procedimento computacionalbem definido que:

recebe um conjunto de valores como entrada e

produz um conjunto de valores como saıda.

Equivalentemente, um algoritmo e uma ferramenta para resolverum problema computacional. Este problema define a relacaoprecisa que deve existir entre a entrada e a saıda do algoritmo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplos de problemas: teste de primalidade

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplos de problemas: teste de primalidade

Problema: determinar se um dado numero e primo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplos de problemas: teste de primalidade

Problema: determinar se um dado numero e primo.

Exemplo:

Entrada: 9411461

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplos de problemas: teste de primalidade

Problema: determinar se um dado numero e primo.

Exemplo:

Entrada: 9411461

Saıda: E primo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplos de problemas: teste de primalidade

Problema: determinar se um dado numero e primo.

Exemplo:

Entrada: 9411461

Saıda: E primo.

Exemplo:

Entrada: 8411461

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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. (8411461 = 1913× 4397)

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplos de problemas: ordenacao

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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 n

33 55 33 44 33 22 11 99 22 55 77

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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 n

33 55 33 44 33 22 11 99 22 55 77

Saıda:

1 n

11 22 22 33 33 33 44 55 55 77 99

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Instancia de um problema

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Instancia de um problema

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

Exemplo:Os numeros 9411461 e 8411461 sao instancias do problema deprimalidade.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Instancia de um problema

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

Exemplo:Os numeros 9411461 e 8411461 sao instancias do problema deprimalidade.

Exemplo:O vetor

1 n

33 55 33 44 33 22 11 99 22 55 77

e uma instancia do problema de ordenacao.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

A importancia dos algoritmos para a computacao

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

A importancia dos algoritmos para a computacao

Onde se encontra aplicacoes para o uso/desenvolvimento dealgoritmos “eficientes”?

projetos de genoma de seres vivos

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

A importancia dos algoritmos para a computacao

Onde se encontra aplicacoes para o uso/desenvolvimento dealgoritmos “eficientes”?

projetos de genoma de seres vivos

rede mundial de computadores

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

A importancia dos algoritmos para a computacao

Onde se encontra aplicacoes para o uso/desenvolvimento dealgoritmos “eficientes”?

projetos de genoma de seres vivos

rede mundial de computadores

comercio eletronico

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

A importancia dos algoritmos para a computacao

Onde se encontra aplicacoes para o uso/desenvolvimento dealgoritmos “eficientes”?

projetos de genoma de seres vivos

rede mundial de computadores

comercio eletronico

planejamento da producao de industrias

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

A importancia dos algoritmos para a computacao

Onde se encontra 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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

A importancia dos algoritmos para a computacao

Onde se encontra 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

muitos outros. . .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Infelizmente, existem certos problemas para os quais nao seconhece algoritmos “eficientes” capazes de resolve-los.Eles sao chamados problemas NP-completos.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Infelizmente, existem certos problemas para os quais nao seconhece algoritmos “eficientes” capazes de resolve-los.Eles sao chamados problemas NP-completos.

Curiosamente, nao foi provado que tais algoritmos naoexistem!

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Infelizmente, existem certos problemas para os quais nao seconhece algoritmos “eficientes” capazes de resolve-los.Eles sao chamados problemas NP-completos.

Curiosamente, nao foi provado que tais algoritmos naoexistem!

Esses problemas tem a caracterıstica notavel de que se umdeles admitir um algoritmo “eficiente” entao todos admitemalgoritmos “eficientes”.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Infelizmente, existem certos problemas para os quais nao seconhece algoritmos “eficientes” capazes de resolve-los.Eles sao chamados problemas NP-completos.

Curiosamente, nao foi provado que tais algoritmos naoexistem!

Esses problemas tem a caracterıstica notavel de que se umdeles admitir um algoritmo “eficiente” entao todos admitemalgoritmos “eficientes”.

Por que devo me preocupar com problemas NP-completos?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Infelizmente, existem certos problemas para os quais nao seconhece algoritmos “eficientes” capazes de resolve-los.Eles sao chamados problemas NP-completos.

Curiosamente, nao foi provado que tais algoritmos naoexistem!

Esses problemas tem a caracterıstica notavel de que se umdeles admitir um algoritmo “eficiente” entao todos admitemalgoritmos “eficientes”.

Por que devo me preocupar com problemas NP-completos?Problemas dessa classe surgem em inumeras situacoespraticas.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Exemplos:

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Exemplos:

calcular as rotas dos caminhoes de entrega de umadistribuidora de bebidas em Sao Paulo, minimizando adistancia percorrida. (vehicle routing)

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Exemplos:

calcular as rotas dos caminhoes de entrega de umadistribuidora de bebidas em Sao Paulo, minimizando adistancia percorrida. (vehicle routing)

calcular o numero mınimo de containers para transportar umconjunto de caixas com produtos. (bin packing 3D)

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Exemplos:

calcular as rotas dos caminhoes de entrega de umadistribuidora de bebidas em Sao Paulo, minimizando adistancia percorrida. (vehicle routing)

calcular o numero mınimo de containers para transportar umconjunto de caixas com produtos. (bin packing 3D)

calcular a localizacao e o numero mınimo de antenas decelulares para garantir a cobertura de uma certa regiaogeografica. (facility location)

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Exemplos:

calcular as rotas dos caminhoes de entrega de umadistribuidora de bebidas em Sao Paulo, minimizando adistancia percorrida. (vehicle routing)

calcular o numero mınimo de containers para transportar umconjunto de caixas com produtos. (bin packing 3D)

calcular a localizacao e o numero mınimo de antenas decelulares para garantir a cobertura de uma certa regiaogeografica. (facility location)

muito outros. . .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Dificuldade intrınseca de problemas

Exemplos:

calcular as rotas dos caminhoes de entrega de umadistribuidora de bebidas em Sao Paulo, minimizando adistancia percorrida. (vehicle routing)

calcular o numero mınimo de containers para transportar umconjunto de caixas com produtos. (bin packing 3D)

calcular a localizacao e o numero mınimo de antenas decelulares para garantir a cobertura de uma certa regiaogeografica. (facility location)

muito outros. . .

E importante saber identificar quando estamos lidando com umproblema NP-completo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

O mundo ideal: os computadores tem velocidade deprocessamento e memoria infinitas. Neste caso, qualqueralgoritmo e igualmente bom e esta disciplina e inutil!

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

O mundo ideal: os computadores tem velocidade deprocessamento e memoria infinitas. Neste caso, qualqueralgoritmo e igualmente bom e esta disciplina e inutil!

O mundo real: computadores tem velocidade deprocessamento e memoria limitadas.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

O mundo ideal: os computadores tem velocidade deprocessamento e memoria infinitas. Neste caso, qualqueralgoritmo e igualmente bom e esta disciplina e inutil!

O mundo real: computadores tem velocidade deprocessamento e memoria limitadas.

Neste caso faz muita diferenca ter um bom algoritmo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

Exemplo: ordenacao de um vetor de n elementos

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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 .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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 na maquina A por um excelenteprogramador em linguagem de maquina (ultra-rapida).Executa 2n2 instrucoes.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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 na maquina 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 “mais-ou-menos”.Executa 50n log n instrucoes.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

O que acontece quando ordenamos um vetor de um milhao(106) de elementos? Qual algoritmo e mais rapido?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

O que acontece quando ordenamos um vetor de um milhao(106) de elementos? Qual algoritmo e mais rapido?

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

109 instrucoes/segundo≈ 2000 segundos

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

O que acontece quando ordenamos um vetor de um milhao(106) 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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

O que acontece quando ordenamos um vetor de um milhao(106) 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.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia

O que acontece quando ordenamos um vetor de um milhao(106) 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 (107) de elementos, esta razaosera de 2.3 dias para 20 minutos.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia – Conclusoes

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia – Conclusoes

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia – Conclusoes

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

Isso pode ser tao importante quanto o projeto de hardware.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Algoritmos e tecnologia – Conclusoes

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

Isso pode ser tao importante quanto o projeto de hardware.

A melhora obtida pode ser tao significativa que nao poderiaser obtida simplesmente com o avanco da tecnologia.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Problema da ordenacao

Problema da ordenacao.

Entrada: um vetor A[1 . . . n] de elementos comparaveis

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Problema da ordenacao

Problema da ordenacao.

Entrada: um vetor A[1 . . . n] de elementos comparaveis

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

Vamos comecar analisando o algoritmo de ordenacao baseado nometodo de insercao (Insertion sort).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Problema da ordenacao

Problema da ordenacao.

Entrada: um vetor A[1 . . . n] de elementos comparaveis

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

Vamos comecar analisando o algoritmo de ordenacao baseado nometodo de insercao (Insertion sort).

Isto nos permitira destacar alguns dos aspectos mais importantesno estudo de algoritmos para esta disciplina.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Insercao em um vetor ordenado

1 j n

20 25 35 40 44 55 38 99 10 65 50

O subvetor A[1 . . . j − 1] esta ordenado.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Insercao em um vetor ordenado

1 j n

20 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:

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Insercao em um vetor ordenado

1 j n

20 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 n

20 25 35 38 40 44 55 99 10 65 50

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Como fazer a insercao

chave = 381 i j n

20 25 35 40 44 55 38 99 10 65 50

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Como fazer a insercao

chave = 381 i j n

20 25 35 40 44 55 38 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Como fazer a insercao

chave = 381 i j n

20 25 35 40 44 55 38 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Como fazer a insercao

chave = 381 i j n

20 25 35 40 44 55 38 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Como fazer a insercao

chave = 381 i j n

20 25 35 40 44 55 38 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

1 i j n

20 25 35 40 44 55 99 10 65 50

1 i j n

20 25 35 38 40 44 55 99 10 65 50

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Ordenacao por insercao

chave 1 j n

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Ordenacao por insercao

chave 1 j n

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Ordenacao por insercao

chave 1 j n

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

chave 1 j n

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Ordenacao por insercao

chave 1 j n

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

chave 1 j n

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Ordenacao por insercao

chave 1 j n

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

chave 1 j n

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

chave 1 j n

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Ordenacao por insercao

chave 1 j n

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

chave 1 j n

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

chave 1 j n

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Ordenacao por insercao

chave 1 j n

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

chave 1 j n

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

chave 1 j n

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

chave 1 j

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Ordenacao por insercao

chave 1 j n

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

chave 1 j n

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

chave 1 j n

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

chave 1 j

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Descricao de algoritmos

Podemos descrever um algoritmo de varias maneiras:

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Descricao de algoritmos

Podemos descrever um algoritmo de varias maneiras:

usando uma linguagem de programacao de alto nıvel: C,Pascal, Java etc

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Descricao de algoritmos

Podemos descrever um algoritmo de varias maneiras:

usando uma linguagem de programacao de alto nıvel: C,Pascal, Java etc

implementando-o em linguagem de maquina diretamenteexecutavel em hardware

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Descricao de algoritmos

Podemos descrever um algoritmo de varias maneiras:

usando uma linguagem de programacao de alto nıvel: C,Pascal, Java etc

implementando-o em linguagem de maquina diretamenteexecutavel em hardware

em portugues

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Descricao de algoritmos

Podemos descrever um algoritmo de varias maneiras:

usando uma linguagem de programacao de alto nıvel: C,Pascal, Java etc

implementando-o em linguagem de maquina diretamenteexecutavel em hardware

em portugues

em um pseudo-codigo de alto nıvel, como no livro do CLRS

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Descricao de algoritmos

Podemos descrever um algoritmo de varias maneiras:

usando uma linguagem de programacao de alto nıvel: C,Pascal, Java etc

implementando-o em linguagem de maquina diretamenteexecutavel em hardware

em portugues

em um pseudo-codigo de alto nıvel, como no livro do CLRS

Usaremos essencialmente as duas ultimas alternativas nestadisciplina.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplo de pseudo-codigo

Algoritmo Insertion-Sort: rearranja um vetor A[1 . . . n] demodo que fique crescente.

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise do algoritmo

O que e importante considerar?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise do algoritmo

O que e importante considerar?

Corretude do algoritmo: mostrar que para qualquer instanciado problema, o algoritmo para e devolve uma resposta correta.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise do algoritmo

O que e importante considerar?

Corretude do algoritmo: mostrar que para qualquer instanciado problema, o algoritmo para e devolve uma resposta correta.

Complexidade de tempo do algoritmo: determinar o numerode intrucoes necessarias no pior caso para ordenar nelementos?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

O algoritmo para

Insertion-Sort(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 . . .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

O algoritmo para

Insertion-Sort(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 cada iteracaoe o valor inicial e i = j − 1 ≥ 1. Logo, a sua execucao para emalgum momento por causa do teste condicional i ≥ 1.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

O algoritmo para

Insertion-Sort(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 cada iteracaoe o valor inicial e i = j − 1 ≥ 1. Logo, a sua execucao para emalgum momento por causa do teste condicional i ≥ 1.

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

O algoritmo para

Insertion-Sort(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 cada iteracaoe o valor inicial e i = j − 1 ≥ 1. Logo, a sua execucao para emalgum momento por causa do teste condicional i ≥ 1.

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

O algoritmo para

Insertion-Sort(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 cada iteracaoe o valor inicial e i = j − 1 ≥ 1. Logo, a sua execucao para emalgum momento por causa do teste condicional i ≥ 1.

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

Portanto, o algoritmo para.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Corretude de Insertion-Sort

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Corretude de Insertion-Sort

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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

E obvio que o Insertion-Sort funciona! (Certo??)

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Corretude de Insertion-Sort

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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

E obvio que o Insertion-Sort funciona! (Certo??)

Talvez, mas uma prova rigorosa deste fato exige um certoformalismo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Corretude de Insertion-Sort

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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

E obvio que o Insertion-Sort funciona! (Certo??)

Talvez, mas uma prova rigorosa deste fato exige um certoformalismo.

Como provar que Insertion-Sort esta correto?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Definicao:

Um invariante de um laco e uma propriedade que vale no inıcio decada iteracao do laco e relaciona as variaveis do algoritmo a umaexecucao completa do laco.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Definicao:

Um invariante de um laco e uma propriedade que vale no inıcio decada iteracao do laco e relaciona as variaveis do algoritmo a umaexecucao completa do laco.

O uso de um ou mais invariantes de laco permite provar (eentender) a corretude de um algoritmo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Definicao:

Um invariante de um laco e uma propriedade que vale no inıcio decada iteracao do laco e relaciona as variaveis do algoritmo a umaexecucao completa do laco.

O uso de um ou mais invariantes de laco permite provar (eentender) a corretude de um algoritmo.

Em geral, e mais difıcil descobrir um invariante apropriado doque mostrar sua validade se ele for dado de bandeja. . .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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 do laco da linha 1: (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].

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco e corretude de Insertion-Sort

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco e corretude de Insertion-Sort

Invariante do laco da linha 1: (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].

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco e corretude de Insertion-Sort

Invariante do laco da linha 1: (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].

Suponha que o invariante vale.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco e corretude de Insertion-Sort

Invariante do laco da linha 1: (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].

Suponha que o invariante vale.

Entao a corretude do algoritmo e “evidente”. Por que?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco e corretude de Insertion-Sort

Invariante do laco da linha 1: (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].

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!

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Prova de invariante

A estrategia para mostrar a validade de um invariante e mostrar osseguintes dois fatos:

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Prova de invariante

A estrategia para mostrar a validade de um invariante e mostrar osseguintes dois fatos:

1 Inicializacao: Mostre que o invariante vale no inıcio daprimeira iteracao do laco.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Prova de invariante

A estrategia para mostrar a validade de um invariante e mostrar osseguintes dois fatos:

1 Inicializacao: Mostre que o invariante vale no inıcio daprimeira iteracao do laco.

2 Manutencao: Se o invariante vale no inıcio de uma iteracaoqualquer, entao ele vale no ınicio da proxima iteracao.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Prova de invariante

A estrategia para mostrar a validade de um invariante e mostrar osseguintes dois fatos:

1 Inicializacao: Mostre que o invariante vale no inıcio daprimeira iteracao do laco.

2 Manutencao: Se o invariante vale no inıcio de uma iteracaoqualquer, entao ele vale no ınicio da proxima iteracao.

Note que (1) e (2) implicam que o invariante vale no inıcio dequalquer iteracao do algoritmo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Prova de invariante

A estrategia para mostrar a validade de um invariante e mostrar osseguintes dois fatos:

1 Inicializacao: Mostre que o invariante vale no inıcio daprimeira iteracao do laco.

2 Manutencao: Se o invariante vale no inıcio de uma iteracaoqualquer, entao ele vale no ınicio da proxima iteracao.

Note que (1) e (2) implicam que o invariante vale no inıcio dequalquer iteracao do algoritmo.

Isto e similar ao metodo de inducao matematica ou inducao finita.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Invariante do laco da linha 1: (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].

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Invariante do laco da linha 1: (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].

Inicializacao: no inıcio temos j = 2 e o invariante diz que A[1 . . . 1]e uma permutacao ordenada subvetor original A[1 . . . 1], o que eclaramente verdadeiro.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Invariante do laco da linha 1: (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].

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Invariante do laco da linha 1: (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].

Manutencao: suponha que o invariante vale em uma iteracaoqualquer.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Invariante do laco da linha 1: (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].

Manutencao: suponha que o invariante vale em uma iteracaoqualquer.

Lembre-se de como o algoritmo trabalha.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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

Argumento informal: O algoritmo empurra os elementos maioresque a chave para seus lugares corretos e ela e colocada no espacovazio (posicao i + 1).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Invariante de laco

Insertion-Sort(A, n)1 para j ← 2 ate n faca2 chave ← A[j ]3 ⊲ 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

Argumento informal: O algoritmo empurra os elementos maioresque a chave para seus lugares corretos e ela e colocada no espacovazio (posicao i + 1).

Uma demonstracao mais formal deste fato exige invariantesauxiliares para o laco interno da linha 5.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise de complexidade

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise de complexidade

Em geral, nao basta saber que um dado algoritmo para.Se ele for muito lento, tera pouca utilidade.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise de complexidade

Em geral, nao basta saber que um dado algoritmo para.Se ele for muito lento, tera pouca utilidade.

Queremos projetar/desenvolver algoritmos eficientes (rapidos).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise de complexidade

Em geral, nao basta saber que um dado algoritmo para.Se ele for muito lento, tera pouca utilidade.

Queremos projetar/desenvolver algoritmos eficientes (rapidos).

Mas o que seria uma boa medida de eficiencia de umalgoritmo?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise de complexidade

Em geral, nao basta saber que um dado algoritmo para.Se ele for muito lento, 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 maquina foi usada.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise de complexidade

Em geral, nao basta saber que um dado algoritmo para.Se ele for muito lento, 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 maquina foi usada.

Queremos um criterio uniforme para comparar algoritmos.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Modelo Computacional

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Modelo Computacional

Uma possibilidade e definir um modelo computacional de umamaquina.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Modelo Computacional

Uma possibilidade e definir um modelo computacional de umamaquina.

O modelo computacional estabelece quais os recursosdisponıveis, as instrucoes basicas e quanto elas custam(= tempo).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Modelo Computacional

Uma possibilidade e definir um modelo computacional de umamaquina.

O modelo computacional estabelece quais os recursosdisponıveis, as instrucoes basicas e quanto elas custam(= tempo).

Dentre desse modelo, podemos estimar atraves de uma analisematematica o tempo que um algoritmo gasta em funcao dotamanho da entrada(= analise de complexidade).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Modelo Computacional

Uma possibilidade e definir um modelo computacional de umamaquina.

O modelo computacional estabelece quais os recursosdisponıveis, as instrucoes basicas e quanto elas custam(= tempo).

Dentre desse modelo, podemos estimar atraves de uma analisematematica o tempo que um algoritmo gasta em funcao dotamanho da entrada(= analise de complexidade).

A analise de complexidade depende sempre do modelocomputacional adotado.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Maquinas RAM

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Maquinas RAM

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

simula maquinas convencionais (de verdade),

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Maquinas RAM

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

simula maquinas convencionais (de verdade),

possui um unico processador que executa instrucoessequencialmente,

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Maquinas RAM

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

simula maquinas convencionais (de verdade),

possui um unico processador que executa instrucoessequencialmente,

tipos basicos sao numeros inteiros e reais,

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Maquinas RAM

Salvo mencionado o contrario, usaremos o Modelo Abstrato RAM(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: se aentrada tem “tamanho” n, entao cada inteiro e representadopor c log n bits para alguma constante c ≥ 1. (Isto garanteque e possıvel guardar o valor de n e indexar os elementosindividualmente.)

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Maquinas RAM

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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,

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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 caem em uma zona cinza, por exemplo,exponenciacao,

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

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 caem em uma zona cinza, por exemplo,exponenciacao,

veja maiores detalhes do modelo RAM no CLRS.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Tamanho da entrada

Problema: Primalidade

Entrada: inteiro n

Tamanho: ⌊log2 n⌋+ 1 ≈ log2 n

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Tamanho da entrada

Problema: Primalidade

Entrada: inteiro n

Tamanho: ⌊log2 n⌋+ 1 ≈ log2 n

Problema: Ordenacao

Entrada: vetor A[1 . . . n]

Tamanho: n lg2 U onde U e o maior numero em A[1 . . . n]Tamanho: n (e usual usar isto no problema de ordenacao)

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Tamanho da entrada

Problema: Primalidade

Entrada: inteiro n

Tamanho: ⌊log2 n⌋+ 1 ≈ log2 n

Problema: Ordenacao

Entrada: vetor A[1 . . . n]

Tamanho: n lg2 U onde U e o maior numero em A[1 . . . n]Tamanho: n (e usual usar isto no problema de ordenacao)

Informalmente, o tamanho da entrada e o numero de bitsnecessario para especificar a entrada.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

A complexidade de tempo (= eficiencia) de um algoritmo e onumero de instrucoes basicas que ele executa em funcao dotamanho da entrada.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

A complexidade de tempo (= eficiencia) de um algoritmo e onumero de instrucoes basicas que ele executa em funcao dotamanho da entrada.

Adota-se uma “atitude pessimista” e faz-se uma analise depior caso.Determina-se o tempo maximo necessario para resolver umainstancia de um certo tamanho.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

A complexidade de tempo (= eficiencia) de um algoritmo e onumero de instrucoes basicas que ele executa em funcao dotamanho da entrada.

Adota-se uma “atitude pessimista” e faz-se uma analise depior caso.Determina-se o tempo maximo necessario para resolver umainstancia de um certo tamanho.

Alem disso, a analise concentra-se no comportamento doalgoritmo para entradas de tamanho GRANDE = analiseassintotica.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise do InsertionSort

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 ?2 chave ← A[j ] c2 ?3 ⊲ 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 ?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise do InsertionSort

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 ?2 chave ← A[j ] c2 ?3 ⊲ 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 ?

O valor ck representa o custo (tempo) de cada execucao da linha k .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise do InsertionSort

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 ?2 chave ← A[j ] c2 ?3 ⊲ 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 ?

O valor ck representa o custo (tempo) de cada execucao da linha k .

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Analise do InsertionSort

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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

O valor ck representa o custo (tempo) de cada execucao da linha k .

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Tempo de execucao total

Logo, o tempo total de execucao T (n) de Insertion-Sorte asoma 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).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Tempo de execucao total

Logo, o tempo total de execucao T (n) de Insertion-Sorte asoma 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 de n),podem apresentar tempos de execucao diferentes ja que o valor deT (n) depende dos valores dos tj .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Melhor caso: tj = 1

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Melhor caso: tj = 1

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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

O melhor caso de Insertion-Sort ocorre quando o vetor A jaesta ordenado. Para j = 2, . . . , n temos A[i ] ≤ chave na linha 5quando i = j − 1. Assim, tj = 1 para j = 2, . . . , n.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Melhor caso: tj = 1

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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 n − 16 A[i + 1] ← A[i ] c6 07 i ← i − 1 c7 08 A[i + 1] ← chave c8 n − 1

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Melhor caso: tj = 1

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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 n − 16 A[i + 1] ← A[i ] c6 07 i ← i − 1 c7 08 A[i + 1] ← chave c8 n − 1

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).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Melhor caso: tj = 1

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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 n − 16 A[i + 1] ← A[i ] c6 07 i ← i − 1 c7 08 A[i + 1] ← chave c8 n − 1

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 a e bque dependem apenas dos ci .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Melhor caso: tj = 1

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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 n − 16 A[i + 1] ← A[i ] c6 07 i ← i − 1 c7 08 A[i + 1] ← chave c8 n − 1

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 a e bque dependem apenas dos ci .

Portanto, no melhor caso, o tempo de execucao e uma funcaolinear no tamanho da entrada.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Pior caso: tj = j

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Pior caso: tj = j

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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

Quando o vetor A esta em ordem decrescente, ocorre o pior casopara Insertion-Sort. Para inserir a chave em A[1 . . . j − 1],temos que compara-la com todos os elementos neste subvetor.Assim, tj = j para j = 2, . . . , n.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Pior caso: tj = j

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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 j

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

j=2(j − 1)

7 i ← i − 1 c7∑n

j=2(j − 1)

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Pior caso: tj = j

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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 j

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

j=2(j − 1)

7 i ← i − 1 c7∑n

j=2(j − 1)

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

Lembre-se que:

n∑

j=2

j =n(n + 1)

2− 1 e

n∑

j=2

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

2.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Pior caso: tj = j

Insertion-Sort(A, n) Custo # execucoes

1 para j ← 2 ate n faca c1 n2 chave ← A[j ] c2 n − 13 ⊲ 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 n(n + 1)/2− 16 A[i + 1] ← A[i ] c6 n(n − 1)/27 i ← i − 1 c7 n(n − 1)/28 A[i + 1] ← chave c8 n − 1

Lembre-se que:

n∑

j=2

j =n(n + 1)

2− 1 e

n∑

j=2

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

2.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Pior caso: tj = j

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Pior caso: tj = j

Logo,

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)

=(c52

+c62

+c72

)

n2 +(

c1 + c2 + c4 +c52

−c62

−c72

+ c8

)

n

− (c2 + c4 + c5 + c8).

Este tempo de execucao e da forma an2 + bn + c onde a, b, c saoconstantes que dependem apenas dos ci .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Pior caso: tj = j

Logo,

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)

=(c52

+c62

+c72

)

n2 +(

c1 + c2 + c4 +c52

−c62

−c72

+ c8

)

n

− (c2 + c4 + c5 + c8).

Este tempo de execucao e da forma an2 + bn + c onde a, b, c saoconstantes que dependem apenas dos ci .

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

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Notacao assintotica

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Notacao assintotica

Ao analisarmos a complexidade de tempo (de pior caso) deInsertion-Sort, vimos que as constantes nao saoimportantes para determinar a sua taxa de crescimento.Ela e uma funcao quadratica an2 + bn + c para constantesa, b, c .

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Notacao assintotica

Ao analisarmos a complexidade de tempo (de pior caso) deInsertion-Sort, vimos que as constantes nao saoimportantes para determinar a sua taxa de crescimento.Ela e uma funcao quadratica an2 + bn + c para constantesa, b, c .

Uma funcao deste tipo e limitada superiormente por umafuncao quadratica dn2 para alguma constante d . Usandonotacao assintotica, dizemos que o algoritmoInsertion-Sort tem complexidade de tempo O(n2).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Notacao assintotica

Ao analisarmos a complexidade de tempo (de pior caso) deInsertion-Sort, vimos que as constantes nao saoimportantes para determinar a sua taxa de crescimento.Ela e uma funcao quadratica an2 + bn + c para constantesa, b, c .

Uma funcao deste tipo e limitada superiormente por umafuncao quadratica dn2 para alguma constante d . Usandonotacao assintotica, dizemos que o algoritmoInsertion-Sort tem complexidade de tempo O(n2).

Mais adiante no curso discutiremos em detalhes o uso danotacao assintotica em analise de algoritmos.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

Um algoritmo e chamado eficiente se a funcao que mede suacomplexidade de tempo e limitada por um polinomio notamanho da entrada.Por exemplo: n, 3n − 7, 4n2, 143n2 − 4n + 2, n5.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

Um algoritmo e chamado eficiente se a funcao que mede suacomplexidade de tempo e limitada por um polinomio notamanho da entrada.Por exemplo: n, 3n − 7, 4n2, 143n2 − 4n + 2, n5.

Mas por que polinomios?

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

Um algoritmo e chamado eficiente se a funcao que mede suacomplexidade de tempo e limitada por um polinomio notamanho da entrada.Por exemplo: n, 3n − 7, 4n2, 143n2 − 4n + 2, n5.

Mas por que polinomios?

(Polinomios sao funcoes bem “comportadas”).

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Medida de complexidade e eficiencia de algoritmos

Um algoritmo e chamado eficiente se a funcao que mede suacomplexidade de tempo e limitada por um polinomio notamanho da entrada.Por exemplo: n, 3n − 7, 4n2, 143n2 − 4n + 2, n5.

Mas por que polinomios?

(Polinomios sao funcoes bem “comportadas”).

Assim, Insertion-Sort e um algoritmo eficiente nestesentido.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplo: teste de primalidade ingenuo

NaivePrimalityCheck(n)1 se n = 2 devolva E primo.2 para i ← 2 ate n − 1 faca3 se n mod i = 04 entao devolva Nao e primo.5 devolva E primo.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplo: teste de primalidade ingenuo

NaivePrimalityCheck(n)1 se n = 2 devolva E primo.2 para i ← 2 ate n − 1 faca3 se n mod i = 04 entao devolva Nao e primo.5 devolva E primo.

Complexidade: no pior caso sao executadas n − 2 iteracoes.A complexidade e 1 + (n − 2) + 1 = n.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Exemplo: teste de primalidade ingenuo

NaivePrimalityCheck(n)1 se n = 2 devolva E primo.2 para i ← 2 ate n − 1 faca3 se n mod i = 04 entao devolva Nao e primo.5 devolva E primo.

Complexidade: no pior caso sao executadas n − 2 iteracoes.A complexidade e 1 + (n − 2) + 1 = n.

Como o tamanho da entrada e lg n e n = 2lg n, o algoritmo NAO epolinomial no tamanho da entrada.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Vantagens do metodo de analise proposto

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Vantagens do metodo de analise proposto

O modelo RAM e robusto e permite prever o comportamentode um algoritmo para instancias GRANDES.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Vantagens do metodo de analise proposto

O modelo RAM e robusto e permite prever o comportamentode um algoritmo para instancias GRANDES.

O modelo permite comparar algoritmos que resolvem ummesmo problema.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Vantagens do metodo de analise proposto

O modelo RAM e robusto e permite prever o comportamentode um algoritmo para instancias GRANDES.

O modelo permite comparar algoritmos que resolvem ummesmo problema.

A analise e mais robusta em relacao as evolucoes tecnologicas.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Desvantagens do metodo de analise proposto

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Desvantagens do metodo de analise proposto

Fornece um limite de complexidade pessimista sempreconsiderando o pior caso.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Desvantagens do metodo de analise proposto

Fornece um limite de complexidade pessimista sempreconsiderando o pior caso.

Em uma aplicacao real, nem todas as instancias ocorrem coma mesma frequencia e e possıvel que as “instancias ruins”ocorram raramente.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Desvantagens do metodo de analise proposto

Fornece um limite de complexidade pessimista sempreconsiderando o pior caso.

Em uma aplicacao real, nem todas as instancias ocorrem coma mesma frequencia e e possıvel que as “instancias ruins”ocorram raramente.

Nao fornece nenhuma informacao sobre o comportamento doalgoritmo no caso medio.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I

Desvantagens do metodo de analise proposto

Fornece um limite de complexidade pessimista sempreconsiderando o pior caso.

Em uma aplicacao real, nem todas as instancias ocorrem coma mesma frequencia e e possıvel que as “instancias ruins”ocorram raramente.

Nao fornece nenhuma informacao sobre o comportamento doalgoritmo no caso medio.

A analise de complexidade de algoritmos no caso medio ebastante difıcil, principalmente, porque muitas vezes nao eclaro o que e o “caso medio”.

Cid C. de Souza, Candida N. da Silva, Orlando Lee MO417 — Complexidade de Algoritmos I