UPE Caruaru Sistemas de Informao Disciplina Estrutura de

  • Slides: 41
Download presentation
UPE – Caruaru – Sistemas de Informação Disciplina: Estrutura de Dados e Arquivo Prof.

UPE – Caruaru – Sistemas de Informação Disciplina: Estrutura de Dados e Arquivo Prof. : Paulemir G. Campos Análise Algorítmica (Notação Assintótica) 6/19/2021 EDA - Prof. Paulemir Campos 1

Comportamento Assintótico de Funções n n n A análise de algoritmos para solucionar um

Comportamento Assintótico de Funções n n n A análise de algoritmos para solucionar um problema de tamanho n é realizada para valores grandes de n. Para tanto, estuda-se o comportamento assintótico das funções de custo ou de complexidade do algoritmo. O comportamento assintótico de f(n) representa o limite do custo quando n cresce. 6/19/2021 EDA - Prof. Paulemir Campos 2

Comportamento Assintótico de Funções n Definição: Uma função f(n) domina assintoticamente outra função g(n)

Comportamento Assintótico de Funções n Definição: Uma função f(n) domina assintoticamente outra função g(n) se existem duas constantes positivas c e m tais que, para n m, temos |g(n)| c. |f(n)| 6/19/2021 EDA - Prof. Paulemir Campos 3

Comportamento Assintótico de Funções n Graficamente, temos: f, g c. f(n) g(n) n m

Comportamento Assintótico de Funções n Graficamente, temos: f, g c. f(n) g(n) n m 6/19/2021 EDA - Prof. Paulemir Campos 4

Comportamento Assintótico de Funções n Exemplo: Seja g(n) = n e f(n) = -n

Comportamento Assintótico de Funções n Exemplo: Seja g(n) = n e f(n) = -n 2, com n pertencente a Z+. Por definição, temos: |g(n)| c. |f(n)| | n | c. |- n 2 | n c. n 2 Note que, fazendo c=1 e m=1, f(n) domina assintoticamente g(n). 6/19/2021 EDA - Prof. Paulemir Campos 5

Comportamento Assintótico de Funções f, g n Graficamente, temos: |f(n)| = c. n 2,

Comportamento Assintótico de Funções f, g n Graficamente, temos: |f(n)| = c. n 2, com c=1 g(n) = n n m=1 6/19/2021 EDA - Prof. Paulemir Campos 6

Notação Assintótica ou Notação O n n Para expressar que f(n) domina assintoticamente g(n),

Notação Assintótica ou Notação O n n Para expressar que f(n) domina assintoticamente g(n), Knuth (1968, p. 104) sugeriu uma notação para essa dominação assintótica. Assim, escrevemos g(n)=O(f(n)), onde se lê g(n) é da ordem no máximo f(n). 6/19/2021 EDA - Prof. Paulemir Campos 7

Notação Assintótica ou Notação O n Exemplo: n 6/19/2021 Se a complexidade de tempo

Notação Assintótica ou Notação O n Exemplo: n 6/19/2021 Se a complexidade de tempo de um algoritmo é g(n)=O(n 2), isto significa que existem constantes positivas c e m tais que, para valores de n maiores ou iguais a m, g(n) c. n 2 , com n pertencente a Z+. EDA - Prof. Paulemir Campos 8

Notação Assintótica ou Notação O n Definição: Uma função g(n) é O(f(n)) se existem

Notação Assintótica ou Notação O n Definição: Uma função g(n) é O(f(n)) se existem duas constantes positivas c e m tais que, para n m, temos |g(n)| c. |f(n)| 6/19/2021 EDA - Prof. Paulemir Campos 9

Notação Assintótica ou Notação O n Exemplo: Seja g(n) = (n+1)2, com n pertencente

Notação Assintótica ou Notação O n Exemplo: Seja g(n) = (n+1)2, com n pertencente a Z+. Observe que g(n) é O(n 2), quando m = 1 e c = 4, pois, por definição, temos: |g(n)| c. |f(n)| | (n+1)2 | c. | n 2 | (n+1)2 c. n 2 , com m = 1 (n+1)2 4. n 2, com n 1. 6/19/2021 EDA - Prof. Paulemir Campos 10

Operações com a Notação O n Algumas delas são: n n n n f(n)

Operações com a Notação O n Algumas delas são: n n n n f(n) = O(f(n)) c. f(n) = O(f(n)), com c pertencente a Z*+ O(f(n)) = O(f(n)) O(O(f(n))) = O(f(n))+O(g(n)) = O(max(f(n), g(n))) O(f(n)). O(g(n)) = O(f(n). g(n)) f(n). O(g(n))=O(f(n). g(n)) 6/19/2021 EDA - Prof. Paulemir Campos 11

Operações com a Notação O Exemplos: n Obtenha a complexidade de tempo em notação

Operações com a Notação O Exemplos: n Obtenha a complexidade de tempo em notação O de alguns algoritmos dada pelas expressões matemáticas seguintes: O(n) + O(n 2) + O(n. log n), com n>0 = O(max(O(n), O(n 2))) + O(n. log n) = O(n 2) + O(n. log n) = O(max(O(n 2), O(n. log n))) = O(n 2), n>0. EDA - Prof. Paulemir n 6/19/2021 Campos 12

Operações com a Notação O f, g n Obtenção de O(max(O(n 2), O(n. log

Operações com a Notação O f, g n Obtenção de O(max(O(n 2), O(n. log n))) graficamente. f(n) = n 2 g(n) = n. log n n n>0 6/19/2021 EDA - Prof. Paulemir Campos 13

Operações com a Notação O [log n + k + O(1/n)]. [n + O(

Operações com a Notação O [log n + k + O(1/n)]. [n + O( n)], com n>1 = n. log n + log n. O( n) + k. n + k. O( n) + + n. O(1/n) + O(1/n). O( n) = O(n. log n) + O( n. log n) + k. O( n) + + O(n. 1/n) + O(1/n. n) = O(n. log n)+O( n. log n)+k. O(max(O(n), O( n))) + + O(max(O(n. 1/n), O( n. 1/n))) = O(n. log n) + O( n. log n) + k. O(n) + O(n. 1/n) n 6/19/2021 EDA - Prof. Paulemir Campos 14

Operações com a Notação O (Continuação) = O(n. log n) + O( n. log

Operações com a Notação O (Continuação) = O(n. log n) + O( n. log n) + k. O(n) + O(n. 1/n) Note que, com n>1, para qualquer valor de k, com k>0, f(n) = k. n domina assintoticamente g(n) = n. 1/n. Assim, temos: = O(n. log n) + O( n. log n) + k. O(n) = O(max(O(n. log n), O( n. log n))) + k. O(n) = O(n. log n) + k. O(n), n>1. n 6/19/2021 EDA - Prof. Paulemir Campos 15

Operações com a Notação O (Continuação) = O(n. log n) + k. O(n), n>1.

Operações com a Notação O (Continuação) = O(n. log n) + k. O(n), n>1. Obs. : Note que, com k=1, f(n) = n. log n domina assintoticamente g(n) = k. n, com n 10. Por sua vez, com k=10, g(n) = k. n domina assintoticamente f(n) = n. log n, com 1 < n < 1010. Portanto, devido a forte dependência do valor de k, EDA - Prof. Paulemir vamos deixar a resposta como mostrada acima. n 6/19/2021 Campos 16

Operações com a Notação O f, g n f(n) = n Obtenção de O(max(O(n),

Operações com a Notação O f, g n f(n) = n Obtenção de O(max(O(n), O( n))) graficamente. g(n) = n n n>1 6/19/2021 EDA - Prof. Paulemir Campos 17

Operações com a Notação O f, g n Obtenção de O(max(O(n. 1/n), O( n.

Operações com a Notação O f, g n Obtenção de O(max(O(n. 1/n), O( n. 1/n))) graficamente. f(n) = n. 1/n g(n) = n. 1/n n n>1 6/19/2021 EDA - Prof. Paulemir Campos 18

Operações com a Notação O f, g n Obtenção de O(max(O(n. log n), O(

Operações com a Notação O f, g n Obtenção de O(max(O(n. log n), O( n. log n))) graficamente. f(n) = n. log n g(n) = n. log n n n>1 6/19/2021 EDA - Prof. Paulemir Campos 19

Operações com a Notação O n n Análise gráfica de O(n. log n) e

Operações com a Notação O n n Análise gráfica de O(n. log n) e k. O(n), n>1 e k=1. Neste caso, temos g(n) = k. n (k=1) dominando assintoticamente f(n) = n. log n, para 1 < n < 10. 6/19/2021 n = 10 f, g g(n) = k. n, com k=1 f(n) = n. log n n EDA - Prof. Paulemir Campos 20

Constantes Multiplicativas versus Notação Assintótica n n Por questão de simplificação, na obtenção de

Constantes Multiplicativas versus Notação Assintótica n n Por questão de simplificação, na obtenção de uma notação assintótica, deve-se desprezar constantes e adições. Geralmente por isso, a notação assintótica não serve para comparar dois algoritmos, mas sim, nos fornece uma idéia da complexidade de execução de um em relação ao outro. 6/19/2021 EDA - Prof. Paulemir Campos 21

Constantes Multiplicativas versus Notação Assintótica n Exemplo: n Um algoritmo F possui complexidade de

Constantes Multiplicativas versus Notação Assintótica n Exemplo: n Um algoritmo F possui complexidade de tempo f(n) = 100. n, isto é, O(n) e um outro algoritmo G é dado por g(n) = 2. n 2, ou seja, O(n 2). Qual desses dois algoritmos é melhor para resolver um problema de tamanho n? 6/19/2021 EDA - Prof. Paulemir Campos 22

Constantes Multiplicativas versus Notação Assintótica n Resposta: n n Depende! Note que para valores

Constantes Multiplicativas versus Notação Assintótica n Resposta: n n Depende! Note que para valores menores do que 50 (n<50), o algoritmo G [O(n 2)] é melhor, g(n) = 2. n 2 (É dominado assintoticamente por f(n) = 100. n). Por outro lado, para valores maiores ou iguais a 50 (n 50), o algoritmo F [O(n)] é melhor, f(n) = 100. n (É dominado assintoticamente por g(n)= 2. n 2). 6/19/2021 EDA - Prof. Paulemir Campos 23

Classes de Comportamento Assintótico n As principais classes de problemas possuem as seguintes funções

Classes de Comportamento Assintótico n As principais classes de problemas possuem as seguintes funções de complexidade: n f(n)=O(1): São algoritmos de complexidade constante. O uso desses algoritmos independem do tamanho de n. Neste caso, as instruções do algoritmo são executadas um número fixo de vezes. 6/19/2021 EDA - Prof. Paulemir Campos 24

Classes de Comportamento Assintótico n n f(n)=O(log n): São algoritmos de complexidade logarítmica. Este

Classes de Comportamento Assintótico n n f(n)=O(log n): São algoritmos de complexidade logarítmica. Este tempo de execução ocorre tipicamente em algoritmos que resolvem um problema transformando-o em problemas menores. f(n)=O(n): São algoritmos de complexidade linear. Em geral, um pequeno trabalho é realizado sobre cada elemento de entrada. 6/19/2021 EDA - Prof. Paulemir Campos 25

Classes de Comportamento Assintótico n n f(n)=O(n. log n): Este tempo de execução ocorre

Classes de Comportamento Assintótico n n f(n)=O(n. log n): Este tempo de execução ocorre tipicamente em algoritmos que resolvem um problema quebrando-o em problemas menores, resolvendo cada um deles independentemente e depois junta-se as soluções. f(n)=O(n 2): São algoritmos de complexidade quadrática. Geralmente isto ocorre quando há processamento com um laço dentro do outro. São úteis quando é relativamente pequeno. EDAn - Prof. Paulemir 6/19/2021 Campos 26

Classes de Comportamento Assintótico n n f(n)=O(n 3): São algoritmos de complexidade cúbica. Úteis

Classes de Comportamento Assintótico n n f(n)=O(n 3): São algoritmos de complexidade cúbica. Úteis apenas para resolver pequenos problemas. f(n)=O(2 n): São algoritmos de complexidade exponencial. Tais algoritmos geralmente não são úteis para resolver problemas do ponto de vista prático. Ocorrem em problemas quando se usa “força bruta” para resolvê-los. 6/19/2021 EDA - Prof. Paulemir Campos 27

Classes de Comportamento Assintótico n Sobre classes de comportamento assintótico destacam-se: n n f(n)=O(cn),

Classes de Comportamento Assintótico n Sobre classes de comportamento assintótico destacam-se: n n f(n)=O(cn), c>1: Algoritmos com essa função de complexidade são chamados de algoritmos exponenciais no tempo de execução. f(n)=O(p(n)), p(n) é um polinômio: Já algoritmos cuja função de complexidade é um polinômio são conhecidos por algoritmos polinomiais no. EDA tempo de execução. - Prof. Paulemir 6/19/2021 Campos 28

Classes de Comportamento Assintótico n Algoritmos Exponenciais n n n Quando o tamanho de

Classes de Comportamento Assintótico n Algoritmos Exponenciais n n n Quando o tamanho de n é grande, tornam-se bastante ineficientes na prática; São geralmente simples variações de pesquisa exaustiva; Problemas solucionados apenas por tais algoritmos são considerados intratáveis, isto é, não existe solução por algoritmo polinomial. 6/19/2021 EDA - Prof. Paulemir Campos 29

Classes de Comportamento Assintótico n Algoritmos Polinomiais n n n Quando o tamanho de

Classes de Comportamento Assintótico n Algoritmos Polinomiais n n n Quando o tamanho de n é grande, tornam-se muito úteis na prática; São geralmente obtidos através de um entendimento mais profundo da estrutura do problema; Apresentam boa solução, isto é, um problema é considerado bem resolvido quando existe um algoritmo polinomial para resolvê-lo. EDA - Prof. Paulemir 6/19/2021 Campos 30

Comparação entre Funções de Complexidade Segundo Garey e Johnson (1979, pág. 7), temos: OBS.

Comparação entre Funções de Complexidade Segundo Garey e Johnson (1979, pág. 7), temos: OBS. : Um algoritmo linear executa em 1 s um milhão de operações. EDA - Prof. Paulemir 6/19/2021 Campos 31

Técnicas de Análise de Algoritmos n Determinar a ordem de tempo de execução de

Técnicas de Análise de Algoritmos n Determinar a ordem de tempo de execução de um algoritmo (notação O) é em geral mais simples do que encontrar a expressão matemática exata da função de complexidade. 6/19/2021 EDA - Prof. Paulemir Campos 32

Técnicas de Análise de Algoritmos n Tentando tornar mais simples a tarefa de obter

Técnicas de Análise de Algoritmos n Tentando tornar mais simples a tarefa de obter tal expressão matemática, Aho, Hopcroft e Ullman (1983) enumeraram alguns princípios a serem seguidos: n 1. Operação de atribuição, leitura ou escrita são consideradas como O(1). Exceções: Chamada de função em comando de atribuição e atribuições que envolvem vetores de tamanho arbitrariamente grandes. 6/19/2021 EDA - Prof. Paulemir Campos 33

Técnicas de Análise de Algoritmos n n 2. O tempo de execução de uma

Técnicas de Análise de Algoritmos n n 2. O tempo de execução de uma seqüência de comandos é determinado pelo maior tempo de execução de qualquer comando dessa seqüência (operação dominante). 3. O tempo de execução de um comando de decisão é composto pelo tempo de execução dos comandos executados dentro do comando condicional mais o tempo para avaliar a condição, que é O(1). 6/19/2021 EDA - Prof. Paulemir Campos 34

Técnicas de Análise de Algoritmos n n 4. O tempo para executar um laço

Técnicas de Análise de Algoritmos n n 4. O tempo para executar um laço é a soma do tempo de execução do corpo do laço mais o tempo de avaliar a condição de parada (geralmente é O(1)), multiplicado pelo número de iterações do laço. 5. Quando o algoritmo possui procedimentos não recursivos, o tempo de execução de cada procedimento deve ser computado separadamente um a um, iniciando com os procedimentos que não chamam outros procedimentos. EDA - Prof. Paulemir 6/19/2021 Campos 35

Técnicas de Análise de Algoritmos n 5. (Continuação) Depois, avalia-se os procedimentos que chamam

Técnicas de Análise de Algoritmos n 5. (Continuação) Depois, avalia-se os procedimentos que chamam os procedimentos que não chamam outros procedimentos, utilizando os tempos dos procedimentos já avaliados. Este processo é repetido até chegar no algoritmo principal. 6/19/2021 EDA - Prof. Paulemir Campos 36

Técnicas de Análise de Algoritmos n 6. Quando o algoritmo possui procedimentos recursivos, para

Técnicas de Análise de Algoritmos n 6. Quando o algoritmo possui procedimentos recursivos, para cada procedimento é associada uma função de complexidade f(n) desconhecida, onde n mede o tamanho dos argumentos para o procedimento. Outra opção é determinar o número total de chamadas recursivas, calcular a complexidade de uma dessas chamadas recursivas (sem considerar outras chamadas), e efetuar esse produto. EDA - Prof. Paulemir 6/19/2021 Campos 37

Técnicas de Análise de Algoritmos n Exemplo: Obtenha a função de complexidade de tempo

Técnicas de Análise de Algoritmos n Exemplo: Obtenha a função de complexidade de tempo e também em notação O do algoritmo abaixo: inteiro Fatorial(inteiro i){ // i 0 se i=<1 então retorne (1) senão retorne (i * Fatorial(i-1)) } 6/19/2021 EDA - Prof. Paulemir Campos 38

Técnicas de Análise de Algoritmos n Resposta: a) Obtenção da função de complexidade de

Técnicas de Análise de Algoritmos n Resposta: a) Obtenção da função de complexidade de tempo. - Esse procedimento recursivo é chamado n vezes; - A complexidade de uma chamada é constante, isto é, O(1). Pois, para n 1, apenas uma atribuição é executada; e para n > 1 apenas um produto é efetuado. 6/19/2021 EDA - Prof. Paulemir Campos 39

Técnicas de Análise de Algoritmos n Resposta: a) (Continuação) - Logo, temos um produto

Técnicas de Análise de Algoritmos n Resposta: a) (Continuação) - Logo, temos um produto de n por 1. Assim, f(n)=n é a função de complexidade de tempo desse algoritmo recursivo. b) Como f(n) = n é a função de complexidade de tempo desse algoritmo, então, trata-se de um algoritmo polinomial de ordem O(n). 6/19/2021 EDA - Prof. Paulemir Campos 40

Referências Bibliográficas n n Ziviani, N. Projeto de Algoritmos: Com implementações em Pascal e

Referências Bibliográficas n n Ziviani, N. Projeto de Algoritmos: Com implementações em Pascal e C. São Paulo: Pioneira, 5 a. ed. , 1999. Szwarcfiter, J. L. ; Markenzon, L. Estruturas de Dados e seus Algoritmos. Rio de Janeiro: LTC, 2 a. ed. , 1994. 6/19/2021 EDA - Prof. Paulemir Campos 41