Analise de Algoritmos

54
Complexidade de Algoritmos Análise de Algoritmos Prof. Osvaldo Luiz de Oliveira Estas anotações devem ser complementadas por apontamentos em aula.

description

Modelo RAM

Transcript of Analise de Algoritmos

  • Complexidade de AlgoritmosAnlise de Algoritmos

    Prof. Osvaldo Luiz de Oliveira

    Estas anotaes devem ser complementadas por apontamentos em aula.

  • Motivao

    2AA

  • Seqncia de Fibonacci

    1, 1, 2, 3, 5, 8, 13, 21, ...

    AA 3

  • Algoritmo 1Algoritmo Fib (n)Entrada: n, inteiro, n 1.Sada: retorna o elemento de ordem n da seqncia de Fibonacci.{

    a := 1; aa := 1; f := 1; i := 3;enquanto ( i n ){

    aux := f; f := a + aa; aa := a; a := aux;i := i + 1

    }

    retornar f}

    AA 4

  • Algoritmo 2

    AA 5

    Algoritmo Fib (n)Entrada: n, inteiro, n 1.Sada: retorna o elemento de ordem n da seqncia de Fibonacci.{

    se (n 2)retornar 1

    senoretornar Fib (n 1) + Fib (n 2)

    }

  • Usando uma calculadora, emquanto tempo voc calcularia onmero de ordem 100 daseqncia de Fibonacci?

    AA 6

  • Um computador capaz de realizar 106 somas por segundo gastaria,

    executando o:

    Algoritmo 1: alguns milissegundos.

    AA 7

    Algoritmo 2: centenas de milhares de anos.

  • Analisar um algoritmo

    Investigar e definir o comportamento:- tempo;- de espao (consumo de memria);- outras propriedades.

    AA 8

  • Metodologias para analisar algoritmos

    AA 9

  • Experimental Mede-se o tempo (t) de execuo do algoritmo por um

    computador para diferentes tamanhos de entrada (n).

    AA 10

    Fonte: GOODRICH, M. T.; TAMASSIA, R. Algoritm Desin: foondations, analysis and Internet examples. New York: John Wiley & Sons, 2002.

  • Que dificuldades voc v nesta abordagem?

    AA 11

  • Teoria da Complexidade de Algoritmos

    Modelo de computao (abstrato, no se prende a um certo computador ou tecnologia)

    Objetivo: calcular uma funo matemtica f (n) que descreve o comportamento do algoritmo considerando um modelo de computao (n representa o tamanho da entrada).

    AA 12

  • A anlise conduzir

    AA 13

    Algoritmo Fib (n)Entrada: n, inteiro, n 1.Sada: retorna o elemento de ordem n da seqncia de Fibonacci.{

    a := 1; aa := 1; f := 1; i := 3;enquanto ( i n ){

    aux := f; f := a + aa; aa := a; a := aux;i := i + 1

    }

    retornar f}

    Tempo de execuo do Algoritmo 1:

    T(n) = O (n).

  • AA 14

    Algoritmo Fib (n)Entrada: n, inteiro, n 1.Sada: retorna o elemento de ordem n da seqncia de Fibonacci.{

    se (n 2)retornar 1

    senoretornar Fib (n 1) + Fib (n 2)

    }

    A anlise conduzirTempo de execuo do Algoritmo 2:

    T(n) = O (2n).

  • Quantas vezes um lao executado?

    AA 15

  • Quantas vezes o comando C ser executado?

    AA 16

    i := 1;enquanto ( i 10 ){

    C;i := i + 1

    }

  • AA 17

    Quantas vezes o comando C ser executado?

    i := 4;enquanto ( i n ){

    C;i := i + 2

    }

  • AA 18

    Quantas vezes o comando C ser executado?

    i := 1;enquanto ( i n ){

    C;i := i * 2

    }

  • AA 19

    Quantas vezes o comando C ser executado?

    para i := 1 at n faapara j := 1 at m faa

    C

  • AA 20

    Quantas vezes o comando C ser executado?

    para i := 1 at n faapara j := i at n faa

    C

  • Modelo de Computao RAM(usaremos)

    Um autmato no qual:- instrues so executadas uma aps a outra; nenhuma operao ocorre em paralelo. - um nico processador executa as operaes. - o tempo de acesso uniforme para todas as localizaes de memria.

    AA 21

  • Qual a complexidade de tempo?Algoritmo Potencia_de_2Entrada: l n, inteiro, n 1.Sada: escreve 2n.{

    ler (n);p := 1;enquanto ( n > 0 ){

    p := 2*p;n := n - 1

    } escrever p

    }

    AA 22

  • AA 23

    READ 1LOAD $1STORE 2

    L: LOAD 1JPZ F LOAD 2MUL $2STORE 2LOAD 1;SUB $1STORE 1JP L

    F: WRITE 2HALT

    ler (n);

    p := 1;enquanto ( n > 0)

    p := 2*p;

    n := n 1

    escrever (p)

    O mesmo algoritmo na linguagem da RAM

  • AA 24

    O mesmo algoritmo na linguagem da RAMREAD 1 ; l da entrada padro e armazena na posio de memria 1.LOAD $1 ; carrega no registrador A a constante 1.STORE 2 ; armazena na posio de memria 2 o valor do registrador A.

    L: LOAD 1 ; carrega no registrador A o valor da posio de memria 1.JPZ F ; desvia para a instruo de rtulo F se o valor do registrador

    ; A for igual a zero.LOAD 2 ; carrega no registrador A o valor da posio de memria 2.MUL $2 ; multiplica o valor do registrador A pela constante 2.STORE 2LOAD 1;SUB $1 ; subtrai o valor do registrador pela constante 1.STORE 1JP L ; desvia para a instruo de rtulo L.

    F: WRITE 2 ; escreve na sada padro o valor da posio de memria 2HALT ; encerra a execuo.

  • Qual a complexidade de tempo?

    AA 25

    READ 1LOAD $1STORE 2

    L: LOAD 1JPZ F LOAD 2MUL $2STORE 2LOAD 1;SUB $1STORE 1JP L

    F: WRITE 2HALT

  • Resultado importante(no ser provado)

    AA 26

    O tempo de execuo de cada comando de em uma linguagem de alto nvel proporcional ao tempo de execuo de comandos da mquina do modelo RAM.

    Logo podemos trabalhar sobre algoritmos escritos em linguagem de alto nvel como se estivssemos trabalhando sobre a mquina do modelo RAM.

  • Ignorando fatores constantes

    AA 27

    Ns iremos ignorar fatores constantes e nos concentraremos no comportamento assinttico da funo que descreve a complexidade do algoritmo.

    Por exemplo, se o algoritmo gasta 100n passos para retornar o resultado ento ns diremos que o tempo de execuo do algoritmo ser descrito por n (i.e., proporcional a n).

  • Complexidades

    AA 28

    Um algoritmo pode ter um comportamento diferente para entradas de tamanho igual a n.

    Pior caso (ou pessimista);

    Melhor caso (ou otimista);

    Caso mdio.

  • Calcule as complexidades de pior caso, melhor caso e caso mdio

    AA 29

    Algoritmo Busca (A, n, x)Entrada: procura o valor igual a x no vetor A, de n elementos.Sada: retorna o ndice do elemento do vetor A igual a x ou retorna zero, caso

    tal elemento no exista.{

    i := 1;enquanto ( i n e x A[i] )

    i := i + 1;

    se ( i n )retornar i

    senoretornar 0

    }

  • Qual a complexidade de espao?

    AA 30

    Algoritmo Busca (A, n, x)Entrada: procura o valor igual a x no vetor A, de n elementos.Sada: retorna o ndice do elemento do vetor A igual a x ou retorna zero, caso

    tal elemento no exista.{

    i := 1;enquanto ( i n e x A[i] )

    i := i + 1;

    se ( i n )retornar i

    senoretornar 0

    }

  • Outros modelos de computao(no usaremos)

    AA 31

    PRAM: parallel RAM.

    Modelo de bits: debita 1 para cada operao sobre um bit.

  • Crescimento de funes

    AA 32

  • Notao O - limite superior -

    AA 33

    Sejam f e g funes.

    Definio: f (n) O ( g (n) ) se e somente se existem constantes c > 0 e N tais que para todo n N ns temos f (n) c.g (n).

    Observao: na maioria das vezes escreveremos f (n) = O ( g (n) ) para significar que f (n) O ( g (n) ).

  • Graficamente

    AA 34

    N

  • Exemplos

    AA 35

    2n2 + 4 O (n2), pois 2n2 + 4 3n2 para n 2 ( c = 3, N = 2)

    2n2 + 4 O (n3), pois 2n2 + 4 1n3 para n 3 ( c = 1, N = 3)

  • Mais observaes

    AA 36

    A notao O permite ignorar constantes convenientemente. Assim:- O (n) = O (5n + 10)- O (log2n) = O (log3n) = O (log4n) = ...

    O (1) denota uma constante.

    Algumas vezes usamos a notao O como parte de uma expresso: - T (n) = 3n2 + O (n)- S (n) = 2nlog2n + 5n + O (1)

  • Provando que uma funof (n) = O(g (n))

    AA 37

    Primeira ferramenta:

    ns aplicamos a definio, isto , temos que achar c e N que satisfaam a definio.

  • Segunda ferramenta

    AA 38

    Teorema 1: para todas as constantes c > 0 e a > 1 e para todas funes monotonamente crescentes f (n) vale

    [ f (n) ]c = O ( a f (n) ).

    Ou seja, uma funo exponencial cresce mais rpido ou tanto quanto uma funo polinomial. Uma funo monotonamente crescente se somente se para todo n2 n1 temos que f (n2) f (n1).

    Exerccios:1 - Mostre que n2 = O (2n).2 - Mostre que log2n = O (n).

  • Terceira ferramenta

    AA 39

    Teorema 2: se f (n) = O (s (n)) e g (n) = O (r (n)) entof (n) + g (n) = O (s (n) + r (n)).

    Teorema 3: se f (n) = O (s (n)) e g (n) = O (r (n)) entof (n) . g (n) = O (s (n) . r (n)).

    Exerccios:1 - Prove o teorema 2.2 - Prove o teorema 3.

  • AA 40

    Tempo de computao para n = 1000

    Um algoritmo com tempo de execuo exponencial ir gastar um tempo astronmico (bilhes e bilhes de anos) para resolver um problema com o tamanho da entrada n = 1000 (mesmo que a base esteja prxima de 1).

    Fonte: MANBER, U. Introduction to Algorithms: A Creative Approach. Boston: Addison Wesley, 1989.

  • AA 41

    Notao - limite inferior -

    Sejam f e g funes.

    Definio: f (n) ( g (n) ) se e somente se existem constantes c > 0 e N tais que, para todo n N ns temos f (n) c.g (n).

  • Graficamente

    AA 42

    N

  • Exemplos

    AA 43

    2n2 + 4 (n2), pois 2n2 + 4 1n2 para n 0 ( c = 1, N = 0)

    n3 (n2), pois n3 1n2 para n 1 ( c = 1, N = 1)

  • AA 44

    Notao - =

    Sejam f e g funes.

    Definio: f (n) (g (n)) se somente se f (n) O (g (n) ) e f (n) ( g (n) ).

  • Graficamente

    AA 45

    N

  • Exemplo

    AA 46

    2n2 + 4 (n2) pois, como mostramos anteriormente, que

    - 2n2 + 4 O (n2) e que

    - 2n2 + 4 (n2).

    Exerccio:1 - Mostre que 5n log n - 100 (n log n).

  • AA 47

    Notaes o, < , e , >

    Sejam f e g funes.

    Definio 1: f (n) o ( g (n) ) se e somente se para todo c > 0 vale f (n) < c.g (n) para n N (c e N constantes).

    Definio 2: f (n) ( g (n) ) se e somente se para todo c > 0 vale f (n) > c.g (n) para n N (c e N constantes).

  • Provando que f (n) = o(g(n))

    AA 48

    Teorema 4: f (n) = o ( g (n) ) se .

    Teorema 5: para todas as constantes c > 0 e a > 1 e para todas funes monotonamente crescentes f (n) vale

    [ f (n) ]c = o ( a f (n) ).

    Ou seja, uma funo exponencial cresce mais rpido do que uma funo polinomial.

    0lim)(

    )(=

    ng

    nfn

  • Somatrios e outras ferramentas matemticas teis

    AA 49

  • AA 50

    Sries aritmticas:1 + 2 + 3 + ... + n = n (n + 1)/2

    Genericamente, se ak = ak-1 + r, onde r uma constante, entoa1 + a2 + a3 + ... + ak = n (ak + a1)/2.

    Sries geomtricas:1 + 2 + 4 + ... + 2n = 2n+1 - 1

    Genericamente, se ak = r ak-1, onde r uma constante, ento

    a1 + a2 + a3 + ... + ak = a1 (r k 1) / (r 1) .

  • AA 51

    Soma dos quadrados:

    Sries harmnicas:

    Onde = 0.577... a constante de Euler.

  • AA 52

    Logaritmos:

    Soma de logaritmos:

    .loglog.log baba ccc +=

    .loglog/log baba ccc =

    .log abxa xb ==

  • AA 53

    Regra da cadeia:

    = .. vduvuudv

    Limites de uma soma por meio de integral:

    Quando f (k) monotonamente crescente.

    Quando f (k) monotonamente decrescente.

  • AA 54

    Aproximao de Stirling:

    Em particular, a aproximao de Stirling implica que

    Complexidade de AlgoritmosMotivaoSeqncia de FibonacciAlgoritmo 1Algoritmo 2Usando uma calculadora, em quanto tempo voc calcularia o nmero de ordem 100 da seqncia de Fibonacci?Um computador capaz de realizar 106 somas por segundo gastaria, executando o:Analisar um algoritmoMetodologias para analisar algoritmosExperimentalQue dificuldades voc v nesta abordagem?Teoria da Complexidade de AlgoritmosA anlise conduzirA anlise conduzirQuantas vezes um lao executado?Quantas vezes o comando C ser executado?Quantas vezes o comando C ser executado?Quantas vezes o comando C ser executado?Quantas vezes o comando C ser executado?Quantas vezes o comando C ser executado?Modelo de Computao RAM(usaremos)Qual a complexidade de tempo?O mesmo algoritmo na linguagem da RAMO mesmo algoritmo na linguagem da RAMQual a complexidade de tempo?Resultado importante(no ser provado)Ignorando fatores constantesComplexidadesCalcule as complexidades de pior caso, melhor caso e caso mdioQual a complexidade de espao?Outros modelos de computao(no usaremos)Crescimento de funesNotao O - limite superior - GraficamenteExemplosMais observaesProvando que uma funo f (n) = O(g (n))Segunda ferramentaTerceira ferramentaTempo de computao para n = 1000Notao - limite inferior - GraficamenteExemplosNotao - = GraficamenteExemploNotaes o, < , e , > Provando que f (n) = o(g(n))Somatrios e outras ferramentas matemticas teisSlide Number 50Slide Number 51Slide Number 52Slide Number 53Slide Number 54