25/3/2009 Algoritmos e Grafos Doutorado em Ciência a da Comutação – DMCC 2009 Raimundo Macedo, LaSiD/DCC/UFBA Noções de Complexidade de Algoritmos d l d d d l 1 25/3/2009 Computadores podem computar muitas coisas (para os quais existam algoritmos), mas algumas coisas são incomputáveis (o problema da parada) !!!! Mas será que todo problema para o qual existe um algoritmo existe de fato uma solução prática? Considere esse exemplo: calcule nm , onde n e m são números naturais qualquer Existirão instâncias desses problema cujas soluções vão contra os princípios naturais: Ex: a matéria no “universo” pode ser menor do que o espaço necessário para escrever o resultado. Outros problemas de maior interesse prático sofrem da mesma dificuldade. Vejamos a seguir. "Given the distances between any two points, what is the shortest route a salesman can make from point A, visiting all points, and returning to point A? This is the Travelling Salesman problem, an NP‐Hard problem in mathematics." 15 3 1 2 20 8 Dado um mapa genérico !!!! Não existe uma solução eficiente para todas as instâncias desse problema. É um problema de otimização combinatória: minimizar uma somatória. 2 25/3/2009 Suponhamos temos um computador muito veloz , capaz de fazer 1 bilhão de adições por segundo No caso de 20 cidades, o computador precisa apenas de 19 adições para dizer qual o comprimento de uma rota e então será capaz de calcular 109 / 19 = 53 milhões de rotas por segundo. Contudo, essa imensa velocidade é um nada frente à imensidão do número 19! de rotas que precisará examinar. O valor de 19! é 121 645 100 408 832 000 ( ou , aproximadamente, 1.2 x 1017 em notação científica ). Conseqüentemente, ele precisará de 1.2 x 1017 / ( 53 milhões ) = 2.3 x 109 segundos para completar sua tarefa, o que equivale a cerca de 73 anos ... O problema é que a quantidade ( n - 1 )! cresce com uma velocidade alarmante, sendo que muito rapidamente o computador torna-se incapaz de executar o que lhe pedimos. n rotas por segundo ( n ‐ 1 )! cálculo total 5 250 milhoes 24 insignific g 10 110 milhoes 362 880 0.003 seg 15 71 milhoes 87 bilhoes 20 min 20 53 milhoes 1.2 x 1017 73 anos 25 42 milhoes 6.2 x 1023 470 milhoes de anos Origem da tabela: http://www.mat.ufrgs.br/ A função de complexidade de tempo de um algoritmo expressa a maior quantidade de tempo necessária para o algoritmo resolver o problema para qualquer entrada possível de um dado tamanho. Algoritmos distintos possuem funções distintas de complexidade de Algoritmos distintos possuem funções distintas de complexidade de tempo. Em geral, se distinguem em algoritmos eficientes e não eficientes, que podem ser caracterizadas pelo seu aspecto polinomial ou exponencial, respectivamente. Para a definição da função é necessário a definição do que seria o tamanho do problema. Ex: no caso do problema de ordenação de tamanho do problema. Ex: no caso do problema de ordenação de vetores ou tabelas, o numero de entradas do vetor ou tabela e utilizado. 3 25/3/2009 Uma definição mais formal Notação Big‐O e Big‐Ω Upper and Lower Boounds f(n) = O(g(n)), se existes constante c e n0 t.q. |f(n)| ≤ c. |g(n)| para todo n ≥ n0 A complexidade é polinomial se definida como O(p(n)) para alguma função polinomial p, onde n e o tamanho do problema. Se a função de complexidade não puder ser limitada por polinômio, diz‐se que a mesma possui complexidade exponencial. Por exemplo, 3x2 + 2x + 5 é O(n2) , 2x + log x + 1 = O(x) É simples verificar que 9O(h1 + h2) = O(h1) + O(h2) 9O(h1 . h2) = O(h1) . O(h2) 9Se h1 ≥ h2, então O(h1 + h2) = O(h1) 9Seja k uma constante, então O(k. h) = k . O(h) = O(h) A complexidade assintótica de uma algoritmo não é única, varia com a entrada Dentro da diversidade de entradas, é portanto importante aquela que corresponde ao pior caso de seqüência de passos de execução. Ou seja, o fator máximo dentre todas as complexidades para entradas suficientemente grandes. Æ Complexidade do pior caso Complexidade do pior caso É uma medida útil e muito usada, mas deve‐se ter cuidado quando 1) O pior caso é pouco freqüente – deve‐se ver então o caso médio. 2) As constantes são valores muito grandes Ex: h1 = 1000. x e h2 = x2 Por analogia, define‐se também a complexidade para o melhor caso Lower bounds É o valor mínimo dentre todas as complexidades do algoritmo para entradas suficientemente grandes. 4 25/3/2009 A complexidade do melhor caso (lower bound) corresponde a um limite superior do número de passos necessários à computação da entrada mais favorável, de tammanho suficientemente grande. Usa‐se a notação Ω F = Ω(h), Î existem constantes c. no > 0, t.q., f(n) ≥ c. h, para n ≥ no. Ex. 5n2 + 2n + 3 é Ω(n2) e 2n3 + 5n é Ω(n3) Complexidade de problemas .... Seja P um problema com entrada n > 0 e g uma função real positiva da variável n. Ω(g) é um lower bound de P quando qualquer algoritmo α que resolva P requerer pelo menos (g) passos. (g) p Ex. Se Ω(n2) for o limite inferior para P (lower bound), não poderá existir algoritmo que resolva P em O(n) passos. Um algoritmo α0 que possua complexidade O(g) é dito ótimo ‐‐‐ g é o limite inferior máximo de P. Ou seja, α0 é o algoritmo de complexidade mais baixa entre todos que resolver P. c. g(n) f(n) f(n) c. g(n) f(n) = Ω(g(n)) f(n) = O(g(n)) c2. g(n) f(n) c1. g(n) f(n) = θ (g(n)) Tight bound ou limite assintótico exado 5 25/3/2009 Limite Inferior da ordenação Ω (nlogn) é o lower bound para o problema de ordenação de uma seqüência S com n elementos *resultado restrito aos algoritmos de ordenação em que as comparações sejam as operações dominantes 6