Estudado complexidade de algoritmos Dailo de Oliveira Domigos wwwdadomicombr Notas de aula de Estrutura de Dados e Aálise de Algoritmos (Professor Adré Bala, mestrado UFABC) Durate os estudos de complexidade de algoritmos é muito comum se deparar com expressões do tipo o grau assitótico é liear, o grau assitótico é quadrático, etc Etão porque ão dar uma revisada as pricipais curvas evolvidas essa aálise? A tabela abaixo mostra como determiadas fuções se comportam o itervalo de domíio (eixo etre e Perceba como o itervalo da imagem (eixo y) varia muito Tabela Pricipais fuções utilizadas a comparação de complexidade de algoritmos Nome Características Equação Gráfico Logarítmico de até 4 = log Liear de até = Logarítmico vezes Liear de até 4 = log Quadrático de até =
Cúbico de até = 3 Expoecial de até = 5 Ates de cotiuar vamos verificar todas jutas um só gráfico: Figura Comparação das curvas o mesmo gráfico Eixo Y limitado em 5 Comparado as curvas do gráfico podemos dizer que se o seu algoritmo tem um comportameto quadrático, o que diz respeito a tempo de processameto em fução do úmero de etradas, etão ele gasta muito mais tempo que um algoritmo liear É claro que existe um jeito melhor de dizer o comportameto do algoritmo, que será visto adiate (Ω, Θ, O)
No que diz respeito ao grau assitótico de uma fução, apeas o grau da tedêcia já é o suficiete para comparar algoritmos etão as costates evolvidas as fuções tedem a ser tratadas como costates irrelevates, por exemplo: Grau assitótico Liear: = 5 + 9 ou = são tratados como = a + b Grau assitótico Logarítmico: f ) = 5log 3 é tratado como = log ( Grau assitótico Quadrático: = 3 + + 8 é tratado como 3 Grau assitótico Cúbico: = + + 5 é tratado como Grau assitótico Expoecial: f 5 ( ) = ou f = = ( ) = é tratado como 3 = Para os exemplos da Figura (e Tabela ) podemos dizer que: Para uma etrada de elemetos, o algoritmo mais eficiete seria o que faz suas rotias seguido uma tedêcia logarítmica Para a mesma etrada de elemetos, o algoritmo meos eficiete seria o que faz suas rotias seguido uma tedêcia expoecial Mas, o que é um algoritmo bom ou ruim? Um que é mais rápido, porem gasta muito mais memória, ou vice-versa? Isso depede bastate do objetivo e dispoibilidade de recursos Limites assitóticos Um algoritmo, dado um cojuto de etrada de dados, pode processá-los de varias formas No caso de um algoritmo de ordeação, de uma forma grosseira, se os dados já estiverem ordeados etão ada precisa ser feito, caso cotrário a ordeação é ecessária Quado a aálise de complexidade é feita, os dois casos extremos são levados em cosideração: Limite assitótico superior O: será uma fução que traduz o grau assitótico do tempo máximo gasto em fução do tamaho da etrada de dados Exemplo: O () ou O ( ), querem dizer respectivamete, limite assitótico superior liear e limite assitótico superior quadrático Geralmete é associado ao pior caso de etrada de dados Limite assitótico iferior Ω: será uma fução que traduz o grau assitótico do tempo míimo gasto em fução do tamaho da etrada de dados Exemplo: Ω ( ) ou Ω ( log), querem dizer respectivamete, limite assitótico iferior quadrático e limite assitótico iferior log Geralmete é associado ao melhor caso de etrada de dados Limite assitótico restrito Θ: em algus casos, os limites assitóticos superior e iferior terão o mesmo grau, este caso, temos O( ) = Ω( ) = θ ( ) Por exemplo, supoha um algoritmo que apresete O ( ) e Ω (), isso sigifica que o tempo máximo que ele demora a realizar sua tarefa tede a uma curva quadrática; da a
mesma forma que o tempo míimo que ele demora a realizar sua tarefa tede a uma curva liear A Figura apreseta esta visualização graficamete Você pode estar se pergutado, mas logo o começiho do gráfico existe um poto ode os limites assitóticos trocam de lugares Isto está correto, etre 4 e ocorre uma iversão e para etradas de dados iferiores aquele valor o algoritmo terá O () e Ω ( ) Mas o objetivo da aálise de complexidade é verificar o tempo de processameto do algoritmo em fução de grades quatidades de dados, desta forma, o começo do gráfico ão terá muita utilidade para 8 dados de etrada, por exemplo Figura Algoritmo com limites assitóticos superior e iferior quadrático e liear, respectivamete Estes dois limites correspodem ao melhor caso e ao pior caso, mas a área em azul compreede todos os outros possíveis casos Figura 3 Gráfico para etrada de dados variado de até 8 Para = 8, tempo gasto o pior caso é aproximadamete vezes maior que o tempo gasto o melhor caso Para uma melhor visualização o gráfico é log-liear
Para provar os limites assitóticos superior, iferior ou restrito, a seguite demostração matemática deve ser feita: Limite assitótico superior O(g() Dizer que uma fução f( tem limite assitótico superior O(g() sigifica dizer: Existe uma costate positiva c e tais que f ( cg( para Ou seja, a fução f( é sempre meor do que a fução g( multiplicada por uma costate, para No exemplo da Figura, correspode àquele poto etre e 4 Limite assitótico restrito Θ(g() Dizer que uma fução f( tem limite assitótico restrito Θ(g() sigifica dizer: Existem costates positivas c, c e tais que cg( f ( cg( para Ou seja, a fução f( está sempre etre (restrita) duas fuções g( iguais a meos de uma costate para Limite assitótico iferior Ω(g() Dizer que uma fução f( tem limite assitótico iferior Ω(g() sigifica dizer: Existe uma costate positiva c e tais que cg( f ( para Ou seja, a fução f( é sempre maior que g( multiplicada por uma costate, para Na maioria dos casos, as codições ão são respeitadas para todo o domíio de x, mas basta provar que a partir de certo as codições são válidas Exemplos: (dps eu faço!)