SlideShare une entreprise Scribd logo
1  sur  5
Télécharger pour lire hors ligne
Estudando complexidade de algoritmos
Danilo de Oliveira Domingos – www.dandomin.com.br
Notas de aula de Estrutura de Dados e Análise de Algoritmos (Professor André Balan, mestrado
UFABC)
Durante os estudos de complexidade de algoritmos é muito comum se deparar com
expressões do tipo “o grau assintótico é linear”, “o grau assintótico é quadrático”, etc. Então
porque não dar uma revisada nas principais curvas envolvidas nessa análise? A tabela abaixo
mostra como determinadas funções se comportam no intervalo de domínio (eixo x) entre 0
e 10. Perceba como o intervalo da imagem (eixo y) varia muito.
Tabela 1. Principais funções utilizadas na comparação de complexidade de algoritmos.
Nome Características Equação Gráfico
Logarítmico
Dada a equação,
quando n varia de
0 até 10, f(n) varia
de 0 até 4.
nnf 2log)( =
Linear
Dada a equação,
quando n varia de
0 até 10, f(n) varia
de 0 até 10.
nnf =)(
Logarítmico
vezes Linear
Dada a equação,
quando n varia de
0 até 10, f(n) varia
de 0 até 40.
nnnf 2log)( =
Quadrático
Dada a equação,
quando n varia de
0 até 10, f(n) varia
de 0 até 200.
2
2)( nnf =
Cúbico
Dada a equação,
quando n varia de
0 até 10, f(n) varia
de 0 até 1000.
3
)( nnf =
Exponencial
Dada a equação,
quando n varia de
0 até 10, f(n) varia
de 0 até 100000.
n
nf 5)( =
Antes de continuar vamos verificar todas juntas num só gráfico:
Figura 1. Comparação das curvas no mesmo gráfico. Eixo Y limitado em 50.
Comparando as curvas do gráfico podemos dizer que se o seu algoritmo “tem um
comportamento” quadrático, no que diz respeito a tempo de processamento em função do
número de entradas, então ele gasta muito mais tempo que um algoritmo linear. É claro
que existe um jeito melhor de dizer o comportamento do algoritmo, que será visto adiante
(Ω, Θ, O).
No que diz respeito ao grau assintótico de uma função, apenas o grau da
“tendência” já é o suficiente para comparar algoritmos então as constantes envolvidas nas
funções tendem a ser tratadas como constantes irrelevantes, por exemplo:
• Grau assintótico Linear: 95)( += nnf ou nnf =)( são tratados como
bannf +=)(
• Grau assintótico Logarítmico: nnf 3log5)( 2= é tratado como nnf log)( =
• Grau assintótico Quadrático: 823)( 2
++= nnnf é tratado como 2
)( nnf =
• Grau assintótico Cúbico: 52)( 23
++= nnnf é tratado como 3
)( nnf =
• Grau assintótico Exponencial: n
nf 5)( = ou n
nf 2)( = é tratado como n
anf =)(
Para os exemplos da Figura 1 (e Tabela 1) podemos dizer que:
• Para uma entrada de 10 elementos, o algoritmo mais eficiente seria o que faz suas
rotinas seguindo uma tendência logarítmica.
• Para a mesma entrada de 10 elementos, o algoritmo menos eficiente seria o que faz
suas rotinas seguindo uma tendência exponencial.
• Mas, o que é um algoritmo bom ou ruim? Um que é mais rápido, porem gasta
muito mais memória, ou vice-versa? Isso depende bastante do objetivo e
disponibilidade de recursos.
Limites assintóticos
Um algoritmo, dado um conjunto de entrada de dados, pode processá-los de varias
formas. No caso de um algoritmo de ordenação, de uma forma grosseira, se os dados já
estiverem ordenados então nada precisa ser feito, caso contrário a ordenação é necessária.
Quando a análise de complexidade é feita, os dois casos extremos são levados em
consideração:
• Limite assintótico superior O: será uma função que traduz o grau assintótico do
tempo máximo gasto em função do tamanho da entrada de dados. Exemplo: )(nO
ou )( 2
nO , querem dizer respectivamente, limite assintótico superior linear e limite
assintótico superior quadrático. Geralmente é associado ao pior caso de entrada de
dados.
• Limite assintótico inferior Ω: será uma função que traduz o grau assintótico do
tempo mínimo gasto em função do tamanho da entrada de dados. Exemplo:
)( 2
nΩ ou )log( nnΩ , querem dizer respectivamente, limite assintótico inferior
quadrático e limite assintótico inferior nlogn. Geralmente é associado ao melhor
caso de entrada de dados.
• Limite assintótico restrito Θ: em alguns casos, os limites assintóticos superior e
inferior terão o mesmo grau, neste caso, temos )()()( nnnO θ=Ω= .
Por exemplo, suponha um algoritmo que apresente )( 2
nO e )(nΩ , isso significa que o
tempo máximo que ele demora a realizar sua tarefa tende a uma curva quadrática; da
mesma forma que o tempo mínimo que ele demora a realizar sua tarefa tende a uma curva
linear. A Figura 2 apresenta esta visualização graficamente. Você pode estar se perguntando,
mas logo no começinho do gráfico existe um ponto onde os limites assintóticos trocam de
lugares. Isto está correto, entre 4 e 2 ocorre uma inversão e para entradas de dados inferiores
aquele valor o algoritmo terá )(nO e )( 2
nΩ . Mas o objetivo da análise de complexidade é
verificar o tempo de processamento do algoritmo em função de grandes quantidades de
dados, desta forma, o começo do gráfico não terá muita utilidade para 180000 dados de
entrada, por exemplo.
Figura 2. Algoritmo com limites assintóticos superior e inferior quadrático e linear, respectivamente. Estes
dois limites correspondem ao melhor caso e ao pior caso, mas a área em azul compreende todos os outros
possíveis casos.
Figura 3. Gráfico para entrada de dados variando de 0 até 180000. Para n = 180000, tempo gasto no pior
caso é aproximadamente 100.000 vezes maior que o tempo gasto no melhor caso. Para uma melhor
visualização o gráfico é log-linear.
Para provar os limites assintóticos superior, inferior ou restrito, a seguinte demonstração
matemática deve ser feita:
• Limite assintótico superior O(g(x)).
Dizer que uma função f(x) tem limite assintótico superior O(g(x)) significa dizer:
Existe uma constante positiva 1c e 0n tais que )()(0 1 xgcxf ≤≤ para 0nn ≥ .
Ou seja, a função f(x) é sempre menor do que a função g(x) multiplicada por uma
constante, para 0nn ≥
No exemplo da Figura 2, 0n corresponde àquele ponto entre 2 e 4.
• Limite assintótico restrito Θ(g(x)).
Dizer que uma função f(x) tem limite assintótico restrito Θ(g(x)) significa dizer:
Existem constantes positivas 1c , 2c e 0n tais que )()()(0 21 xgcxfxgc ≤≤≤
para 0nn ≥ .
Ou seja, a função f(x) está sempre entre (restrita) duas funções g(x) iguais a menos
de uma constante para 0nn ≥ .
• Limite assintótico inferior Ω(g(x)).
Dizer que uma função f(x) tem limite assintótico inferior Ω(g(x)) significa dizer:
Existe uma constante positiva 1c e 0n tais que )()(0 1 xfxgc ≤≤ para 0nn ≥ .
Ou seja, a função f(x) é sempre maior que g(x) multiplicada por uma constante,
para 0nn ≥ .
Na maioria dos casos, as condições não são respeitadas para todo o domínio de x, mas basta
provar que a partir de certo 0n as condições são válidas.
Exemplos:
(dps eu faço!)

Contenu connexe

Tendances

12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivas
Ricardo Bolanho
 
Ger numaleat(1)
Ger numaleat(1)Ger numaleat(1)
Ger numaleat(1)
Iago Lira
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Adriano Teixeira de Souza
 
Apresentação Método de Monte Carlo
Apresentação Método de Monte CarloApresentação Método de Monte Carlo
Apresentação Método de Monte Carlo
Angelo Polotto
 

Tendances (20)

If672cc mp1 sol
If672cc mp1 solIf672cc mp1 sol
If672cc mp1 sol
 
Aula 9
Aula   9Aula   9
Aula 9
 
Aula 10
Aula   10Aula   10
Aula 10
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
Metódos de Pesquisa em C
Metódos de Pesquisa em CMetódos de Pesquisa em C
Metódos de Pesquisa em C
 
Teste Friedman
Teste FriedmanTeste Friedman
Teste Friedman
 
Algoritmos de busca
Algoritmos de buscaAlgoritmos de busca
Algoritmos de busca
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivas
 
Recorrência
RecorrênciaRecorrência
Recorrência
 
Ger numaleat(1)
Ger numaleat(1)Ger numaleat(1)
Ger numaleat(1)
 
Sl 2011 2012-teste-2
Sl 2011 2012-teste-2Sl 2011 2012-teste-2
Sl 2011 2012-teste-2
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
ShellSort - Ordenação
ShellSort - OrdenaçãoShellSort - Ordenação
ShellSort - Ordenação
 
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Tutorial aed iii   001 - algoritmo de ordenação shellsortTutorial aed iii   001 - algoritmo de ordenação shellsort
Tutorial aed iii 001 - algoritmo de ordenação shellsort
 
Operadores
OperadoresOperadores
Operadores
 
Algoritmo Shell Sort
Algoritmo Shell SortAlgoritmo Shell Sort
Algoritmo Shell Sort
 
O algoritmo PageRank do Google
O algoritmo PageRank do GoogleO algoritmo PageRank do Google
O algoritmo PageRank do Google
 
Apresentação Método de Monte Carlo
Apresentação Método de Monte CarloApresentação Método de Monte Carlo
Apresentação Método de Monte Carlo
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividade
 
Teste Derivadas
Teste DerivadasTeste Derivadas
Teste Derivadas
 

En vedette (15)

metodologia 2
metodologia 2metodologia 2
metodologia 2
 
1.as grandes navegações
1.as grandes navegações1.as grandes navegações
1.as grandes navegações
 
Evaluación 1 sociología comunicación Luis Mogollón
Evaluación 1 sociología comunicación Luis MogollónEvaluación 1 sociología comunicación Luis Mogollón
Evaluación 1 sociología comunicación Luis Mogollón
 
Carta a entidades que representam os servidores da educação de Minas
Carta a entidades que representam os servidores da educação de MinasCarta a entidades que representam os servidores da educação de Minas
Carta a entidades que representam os servidores da educação de Minas
 
Apresentacao tcc
Apresentacao tccApresentacao tcc
Apresentacao tcc
 
Mandala.reingenieria. maria castillo.
Mandala.reingenieria. maria castillo.Mandala.reingenieria. maria castillo.
Mandala.reingenieria. maria castillo.
 
Maria gabrielacastillo empleo y desempleo, poder y conflicto laboral.
Maria gabrielacastillo empleo y desempleo, poder y conflicto laboral.Maria gabrielacastillo empleo y desempleo, poder y conflicto laboral.
Maria gabrielacastillo empleo y desempleo, poder y conflicto laboral.
 
Atletes de la Temporada 2011
Atletes de la Temporada 2011Atletes de la Temporada 2011
Atletes de la Temporada 2011
 
Condiciones para el aprendizaje (2)
Condiciones para el aprendizaje (2)Condiciones para el aprendizaje (2)
Condiciones para el aprendizaje (2)
 
Fcb001400097248
Fcb001400097248Fcb001400097248
Fcb001400097248
 
AL FONDO...OSORNO
AL FONDO...OSORNOAL FONDO...OSORNO
AL FONDO...OSORNO
 
Industry Perspectivities_Internets Impact
Industry Perspectivities_Internets ImpactIndustry Perspectivities_Internets Impact
Industry Perspectivities_Internets Impact
 
Tribolbogia final-v4
Tribolbogia final-v4Tribolbogia final-v4
Tribolbogia final-v4
 
1 Sarjana Class layout
1 Sarjana Class layout1 Sarjana Class layout
1 Sarjana Class layout
 
Resolution-14
Resolution-14Resolution-14
Resolution-14
 

Similaire à Complexidade algoritmos

Atividades - Matemática discreta
Atividades - Matemática discretaAtividades - Matemática discreta
Atividades - Matemática discreta
luiz10filho
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
PeslPinguim
 

Similaire à Complexidade algoritmos (20)

O que é logaritmo matematica
O que é logaritmo matematicaO que é logaritmo matematica
O que é logaritmo matematica
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Logaritmos
LogaritmosLogaritmos
Logaritmos
 
Notas De Aula
Notas De AulaNotas De Aula
Notas De Aula
 
Revisao 2 2019.pdf
Revisao 2 2019.pdfRevisao 2 2019.pdf
Revisao 2 2019.pdf
 
Aula10 diagramasde bode
Aula10 diagramasde bodeAula10 diagramasde bode
Aula10 diagramasde bode
 
Artigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfArtigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdf
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Atividades - Matemática discreta
Atividades - Matemática discretaAtividades - Matemática discreta
Atividades - Matemática discreta
 
Matlab
Matlab Matlab
Matlab
 
6 funções-logarítimas
6 funções-logarítimas6 funções-logarítimas
6 funções-logarítimas
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
 
06 complexidade de problemas
06   complexidade de problemas06   complexidade de problemas
06 complexidade de problemas
 
PowerPoint Presentation - Neto Oliveira.pdf
PowerPoint Presentation - Neto Oliveira.pdfPowerPoint Presentation - Neto Oliveira.pdf
PowerPoint Presentation - Neto Oliveira.pdf
 
PARTE 5 - Bases Especiais
PARTE 5 - Bases EspeciaisPARTE 5 - Bases Especiais
PARTE 5 - Bases Especiais
 
Math
MathMath
Math
 
Aula19e20
Aula19e20Aula19e20
Aula19e20
 
Solução de equações não lineares weslley
Solução de equações não lineares weslleySolução de equações não lineares weslley
Solução de equações não lineares weslley
 
Cálculo usando MatLab
Cálculo usando MatLabCálculo usando MatLab
Cálculo usando MatLab
 

Complexidade algoritmos

  • 1. Estudando complexidade de algoritmos Danilo de Oliveira Domingos – www.dandomin.com.br Notas de aula de Estrutura de Dados e Análise de Algoritmos (Professor André Balan, mestrado UFABC) Durante os estudos de complexidade de algoritmos é muito comum se deparar com expressões do tipo “o grau assintótico é linear”, “o grau assintótico é quadrático”, etc. Então porque não dar uma revisada nas principais curvas envolvidas nessa análise? A tabela abaixo mostra como determinadas funções se comportam no intervalo de domínio (eixo x) entre 0 e 10. Perceba como o intervalo da imagem (eixo y) varia muito. Tabela 1. Principais funções utilizadas na comparação de complexidade de algoritmos. Nome Características Equação Gráfico Logarítmico Dada a equação, quando n varia de 0 até 10, f(n) varia de 0 até 4. nnf 2log)( = Linear Dada a equação, quando n varia de 0 até 10, f(n) varia de 0 até 10. nnf =)( Logarítmico vezes Linear Dada a equação, quando n varia de 0 até 10, f(n) varia de 0 até 40. nnnf 2log)( = Quadrático Dada a equação, quando n varia de 0 até 10, f(n) varia de 0 até 200. 2 2)( nnf =
  • 2. Cúbico Dada a equação, quando n varia de 0 até 10, f(n) varia de 0 até 1000. 3 )( nnf = Exponencial Dada a equação, quando n varia de 0 até 10, f(n) varia de 0 até 100000. n nf 5)( = Antes de continuar vamos verificar todas juntas num só gráfico: Figura 1. Comparação das curvas no mesmo gráfico. Eixo Y limitado em 50. Comparando as curvas do gráfico podemos dizer que se o seu algoritmo “tem um comportamento” quadrático, no que diz respeito a tempo de processamento em função do número de entradas, então ele gasta muito mais tempo que um algoritmo linear. É claro que existe um jeito melhor de dizer o comportamento do algoritmo, que será visto adiante (Ω, Θ, O).
  • 3. No que diz respeito ao grau assintótico de uma função, apenas o grau da “tendência” já é o suficiente para comparar algoritmos então as constantes envolvidas nas funções tendem a ser tratadas como constantes irrelevantes, por exemplo: • Grau assintótico Linear: 95)( += nnf ou nnf =)( são tratados como bannf +=)( • Grau assintótico Logarítmico: nnf 3log5)( 2= é tratado como nnf log)( = • Grau assintótico Quadrático: 823)( 2 ++= nnnf é tratado como 2 )( nnf = • Grau assintótico Cúbico: 52)( 23 ++= nnnf é tratado como 3 )( nnf = • Grau assintótico Exponencial: n nf 5)( = ou n nf 2)( = é tratado como n anf =)( Para os exemplos da Figura 1 (e Tabela 1) podemos dizer que: • Para uma entrada de 10 elementos, o algoritmo mais eficiente seria o que faz suas rotinas seguindo uma tendência logarítmica. • Para a mesma entrada de 10 elementos, o algoritmo menos eficiente seria o que faz suas rotinas seguindo uma tendência exponencial. • Mas, o que é um algoritmo bom ou ruim? Um que é mais rápido, porem gasta muito mais memória, ou vice-versa? Isso depende bastante do objetivo e disponibilidade de recursos. Limites assintóticos Um algoritmo, dado um conjunto de entrada de dados, pode processá-los de varias formas. No caso de um algoritmo de ordenação, de uma forma grosseira, se os dados já estiverem ordenados então nada precisa ser feito, caso contrário a ordenação é necessária. Quando a análise de complexidade é feita, os dois casos extremos são levados em consideração: • Limite assintótico superior O: será uma função que traduz o grau assintótico do tempo máximo gasto em função do tamanho da entrada de dados. Exemplo: )(nO ou )( 2 nO , querem dizer respectivamente, limite assintótico superior linear e limite assintótico superior quadrático. Geralmente é associado ao pior caso de entrada de dados. • Limite assintótico inferior Ω: será uma função que traduz o grau assintótico do tempo mínimo gasto em função do tamanho da entrada de dados. Exemplo: )( 2 nΩ ou )log( nnΩ , querem dizer respectivamente, limite assintótico inferior quadrático e limite assintótico inferior nlogn. Geralmente é associado ao melhor caso de entrada de dados. • Limite assintótico restrito Θ: em alguns casos, os limites assintóticos superior e inferior terão o mesmo grau, neste caso, temos )()()( nnnO θ=Ω= . Por exemplo, suponha um algoritmo que apresente )( 2 nO e )(nΩ , isso significa que o tempo máximo que ele demora a realizar sua tarefa tende a uma curva quadrática; da
  • 4. mesma forma que o tempo mínimo que ele demora a realizar sua tarefa tende a uma curva linear. A Figura 2 apresenta esta visualização graficamente. Você pode estar se perguntando, mas logo no começinho do gráfico existe um ponto onde os limites assintóticos trocam de lugares. Isto está correto, entre 4 e 2 ocorre uma inversão e para entradas de dados inferiores aquele valor o algoritmo terá )(nO e )( 2 nΩ . Mas o objetivo da análise de complexidade é verificar o tempo de processamento do algoritmo em função de grandes quantidades de dados, desta forma, o começo do gráfico não terá muita utilidade para 180000 dados de entrada, por exemplo. Figura 2. Algoritmo com limites assintóticos superior e inferior quadrático e linear, respectivamente. Estes dois limites correspondem ao melhor caso e ao pior caso, mas a área em azul compreende todos os outros possíveis casos. Figura 3. Gráfico para entrada de dados variando de 0 até 180000. Para n = 180000, tempo gasto no pior caso é aproximadamente 100.000 vezes maior que o tempo gasto no melhor caso. Para uma melhor visualização o gráfico é log-linear.
  • 5. Para provar os limites assintóticos superior, inferior ou restrito, a seguinte demonstração matemática deve ser feita: • Limite assintótico superior O(g(x)). Dizer que uma função f(x) tem limite assintótico superior O(g(x)) significa dizer: Existe uma constante positiva 1c e 0n tais que )()(0 1 xgcxf ≤≤ para 0nn ≥ . Ou seja, a função f(x) é sempre menor do que a função g(x) multiplicada por uma constante, para 0nn ≥ No exemplo da Figura 2, 0n corresponde àquele ponto entre 2 e 4. • Limite assintótico restrito Θ(g(x)). Dizer que uma função f(x) tem limite assintótico restrito Θ(g(x)) significa dizer: Existem constantes positivas 1c , 2c e 0n tais que )()()(0 21 xgcxfxgc ≤≤≤ para 0nn ≥ . Ou seja, a função f(x) está sempre entre (restrita) duas funções g(x) iguais a menos de uma constante para 0nn ≥ . • Limite assintótico inferior Ω(g(x)). Dizer que uma função f(x) tem limite assintótico inferior Ω(g(x)) significa dizer: Existe uma constante positiva 1c e 0n tais que )()(0 1 xfxgc ≤≤ para 0nn ≥ . Ou seja, a função f(x) é sempre maior que g(x) multiplicada por uma constante, para 0nn ≥ . Na maioria dos casos, as condições não são respeitadas para todo o domínio de x, mas basta provar que a partir de certo 0n as condições são válidas. Exemplos: (dps eu faço!)