5cop096 teoria da computação - · pdf file5cop096 – teoria da...

23
5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise 5COP096 Teoria da Computação Teoria da Computação Aula 4 Prof. Dr. Sylvio Barbon Junior 1 Sylvio Barbon Jr – [email protected]

Upload: danganh

Post on 04-Feb-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

5COP096 Teoria da ComputaçãoTeoria da Computação

Aula 4

Prof. Dr. Sylvio Barbon Junior

1Sylvio Barbon Jr – [email protected]

Page 2: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Sumário

1) Técnicas de Análise de Algoritmos

2) Paradigmas de Projeto de Algoritmos1) Indução

2) Recursão

3) Algoritmos Tentativa e erro

2Sylvio Barbon Jr – [email protected]

Page 3: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Técnicas de Análise de Algoritmos

- A determinação do tempo de execução de um programa qualquer pode se tornar um problema matemático complexo quando se desejar encontrar o valor exato da função de complexidade.

- É mais fácil determinar que o número esperado de comparações é O(n) do que (n+1)/2, porém não tem a precisão adequada.

3Sylvio Barbon Jr – [email protected]

que (n+1)/2, porém não tem a precisão adequada.

- A análise de algoritmos utiliza técnicas de matemática discreta, não existe um conjunto de regras para analisar programas, mas algumas propriedades se destacam:

1) Instruções de atribuição, leitura ou escrita são O(1).

2) O tempo de execução de uma sequência de comandos será determinado pelo maior tempo de execução.

3) Comandos de decisão são O(1).

Page 4: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Técnicas de Análise de Algoritmos

4) O tempo de execução de um anel (laço) é a soma do corpo mais o tempo para avaliação a condição para término, multiplicado pelo número de iterações do anel.

5) Procedimentos Recursivos estão associados a própria função de complexidade.

4Sylvio Barbon Jr – [email protected]

Page 5: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Considerando os paradigmas para projeto de algoritmos, estudaremos:

- Indução;

- Recursividade;

- Tentativa e Erro;

- Divisão e Conquista;

5Sylvio Barbon Jr – [email protected]

- Balanceamento;

- Programação Dinâmica;

- Gulosos;

- Aproximados;

Page 6: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Indução

“Raciocínio que parte de dados particulares e, por meio de uma sequência de operações cognitivas, chega a leis ou conceitos mais gerais, indo dos efeitos à causa, das consequências ao princípio, da experiência à teoria.”

6Sylvio Barbon Jr – [email protected]

Page 7: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Indução

PASSO BASE HIPÓTESE DE INDUÇÃO

7Sylvio Barbon Jr – [email protected]

1. T é válido para n = 1.

2. Para todo n > 1, se T é válido para n-1, então T é válido para N.

Page 8: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Indução

Exemplo 1. Comprovar que S(n) = 1 + 2 + 3 + ... + n é S(n) = n(n+1)/2

Prova por indução:

1) Passo Base: S(1) = 1 (1+1)/2 = 1

2) Hipótese de Indução:

8Sylvio Barbon Jr – [email protected]

S(n) é n(n+1)/2

S(n+1) = (n+1)(n+2)/2

S(n+1) = S(n) + (n+1)

S(n+1) = n(n+1)/2 + (n+1) = (n+1)(n+2)/2

Comprovado!

Page 9: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Indução

Exemplo 2. Considere T(2n) ≤ 2T(n) + 2n -1, T(2) =1

Qual o f(n) para T(n) = O(f(n))?

Prova por indução:

Inequação, encontrar o limite

superior para O

Será que f(n) = n² ?

1) Passo Base: Será que f(n) = cn ?

1) Passo Base: Será que f(n) = n log n ?

9Sylvio Barbon Jr – [email protected]

1) Passo Base: T(2) = 1 ≤ f(2) = 4

2) Hipótese de Indução: T(2n) ≤ 2T(n) + 2n - 1

T(2n) ≤ 2n² + 2n – 1,

< (2n)² ,

< 4n²

Comprovado, mas 4n² apresenta 2n² de diferença, indicativo de

“folga” para T(n)

1) Passo Base: T(2n) ≤ c2n

2) Hipótese de Indução: T(2n) ≤ 2T(n) + 2n - 1

T(2n) ≤ 2cn + 2n – 1

> c2n

Diferença de 2n-1,indicativo de que T(n)

está entre cn e n².

Será que f(n) = n log n ?

1) Passo Base: T(2) < 2 log 2

2) Hipótese de Indução: T(2n) ≤ 2T(n) + 2n –1,

T(2n) ≤ 2n logn +2n – 1

< 2n log 2n

Diferença de apenas 1, indicativo de que T(n) está muito próximo da solução!

T(n) = n log n – n +1

Page 10: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Recursão

- É um método que chama a si mesmo, direta ou indiretamente.

- Permite uma descrição mais clara e concisa de um algoritmo.

10Sylvio Barbon Jr – [email protected]

Page 11: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Recursão

Exemplo 1: Árvore Binária de Pesquisa, onde todo no interno contémum registro com a seguinte propriedade, “Chaves menores na subárvoreesquerda e todos os registros com chaves maiores na subárvore direita”.

public class ArvoreBinaria {

11Sylvio Barbon Jr – [email protected]

public class ArvoreBinaria {private static class Noh{

Object reg;Noh esquerda;Noh direita;

}private Noh raiz;

}

Page 12: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de AlgoritmosRecursão

Exemplo 1: Árvore Binária de Pesquisa.

Algoritmo mais popular para percorrer árvores é o “ordem decaminhamento central”.

private void central (Noh p){

12Sylvio Barbon Jr – [email protected]

O compilador utiliza uma estrutura de PILHA, onde são armazenados osdados para cada chamada de método que ainda não terminou de processar.

Cada variável fica armazenada sem acesso global, dentro da pilha derecursão.

private void central (Noh p){if (p!= null){

central(p.esquerda);System.out.println(p.reg.toString());central(p.dir);

}}

Page 13: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Recursão

Todo comando repetitivo implicam a necessidade de considerar oproblema da terminação.

P ≡ if B then C[Si , P].

Sendo P um método recursivo, B a condição de terminação, C umacomposição dos comandos S e P.

13Sylvio Barbon Jr – [email protected]

composição dos comandos Si e P.

Exemplo: P ≡ if n > 0 then P[Si , P(n-1)].

Quando não usar Recursividade

Um algoritmo recursivo nem sempre é o melhor para resolver umproblema. O consumo de memória é maior do que outras soluções.

P ≡≡≡≡ if B then [S , P]. P ≡≡≡≡ (x=x0; while B do S)

Recursividade Não recursivo

Page 14: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Recursão

Exemplo Fibonacci:

public class Fibonacci{

public static int fibRec(int n){

if(n<2) return n;

else return (fibRec (n-1) + fibRec(n-2));

f0 = 0f1= 1fn = fn-1 + fn-2

para n ≥ 2

{

14Sylvio Barbon Jr – [email protected]

else return (fibRec (n-1) + fibRec(n-2));

}

}

public class Fibonacci{

public static int fibRec(int n){

int i =1, f=0;

for(int k=1; k<=n; k++){

f = i+f;

i= f-i;

}

}

}

para n ≥ 20,1,1,2,3,5,8,13,21,34,55

Page 15: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Recursão

Exemplo Fibonacci:

f0 = 0f1= 1fn = fn-1 + fn-2

para n ≥ 2

{n 10 20 30 50 100

Recursivo 8ms 1s 2min 21dias 109anos

15Sylvio Barbon Jr – [email protected]

para n ≥ 20,1,1,2,3,5,8,13,21,34,55

Recursivo 8ms 1s 2min 21dias 109anos

Iterativo 1/6ms 1/3ms 1/2ms 3/4ms 1,5ms

Brassard e Bradley (1996, p.73)

Page 16: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Recursão – Exemplo 1 – Torres de Hanoi

static void hanoi(int n, int O, int D, int T) {

if (n > 1) {

hanoi(n - 1, O, T, D);

}

mover(O, D);

if(n>1){

hanoi(n - 1, T, D, O);

}

}

T(1) = 1

T(n) = 2T(n-1) + 1

Page 17: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Recursão – Exemplo 2 – MergeSort

private static void sort( Comparable[] a, Comparable[] aux, int l, int r){

if ( r<=l+1) return;

int m = l + ( r – l ) / 2 ;

sort ( a, aux, l, m);

sort( a, aux, m, r);

merge( a , aux , l , m ,r);

}

T(1) = 0

T(n) = 2T(n/2) + n

Page 18: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de AlgoritmosRecursão – Exemplo 3 – Busca em Árvore Bináriaindex binsearch(number n, index low, index high, const keytype S[], keytype x)

if low ≤ high thenmid = (low + high) / 2

if x = S[mid] thenreturn mid

elsif x < s[mid] thenelsif x < s[mid] thenreturn binsearch(n, low, mid-1, S, x)

elsereturn binsearch(n, mid+1, high, S, x)

elsereturn 0

end binsearch

T(1) = 1T(n) = T(n/2) + 1

Page 19: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Recursão

Exercício 1:

Escreva um algoritmo recursivo para determinar o (um) maiorelemento de um vetor A[1..n] de inteiros;

Encontre a função de custo T(n) do algoritmo desenvolvido.Encontre a função de custo T(n) do algoritmo desenvolvido.

Qual a complexidade assintótica, O, do algoritmo desenvolvido?

Page 20: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de AlgoritmosRecursão

Exercício 2:

Considere o algoritmo a seguir, supondo que a operação crucial é “inspecionarelemento”. O algoritmo inspeciona os n elementos de um conjunto e, de algumaforma, consegue descartar 2/5 dos elementos e fazer uma chamada recursiva sobreos 3n/5 elementos restantes. Escreva uma equação de recorrência que descrevaesse comportamento.esse comportamento.

void Pesquisa (int n)

{

if (n < 1)

‘inspecione elemento’;

termine;

else {

‘para cada um dos elementos, inspecione elemento’;

Pesquisa(3 * n / 5);

}

}

Page 21: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de AlgoritmosRecursãoExercício 3:Considere a função abaixo:

int X(int a) { if (a<=0) then

return 0; return 0; else

return (a + X(a-1)); }

a) O que essa função faz? b) Calcule a sua ordem de complexidade. Mostre como você chegou a esse resultado. c) Escreva uma função não-recursiva que resolve o mesmo problema. Qual é a ordem de complexidade da sua função? Explique. d) Qual implementação é mais eficiente? Justifique.

Page 22: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Paradigmas de Projeto de Algoritmos

Algoritmos Tentativa e Erro

- É a resolução de problemas tentando todas as alternativas possíveis;

- Recursividade pode ser usada para problemas de Tentativa e Erro;

- A ideia deste algoritmo é decompor o processo em um número finitode subtarefas parciais, exploradas exaustivamente;

- Seguem as seguintes regras:

1) Passos em direção à solução são “tentados” e registrados.

2) Caso um dos passos não leva à solução final, esse deve serretirado e apagado do registro;

Page 23: 5COP096 Teoria da Computação - · PDF file5COP096 – Teoria da Computação Aula 4 – Técnicas de Análise Técnicas de Análise de Algoritmos - A determinação do tempo de execução

5COP096 – Teoria da ComputaçãoAula 4 – Técnicas de Análise

Referências

Ziviani, Nivio. Projeto de algoritmos: com implementações em Java e C. Thomson Learning, 2007.

Leiserson, Charles E., Ronald L. Rivest, and Clifford Stein. Introduction to algorithms. Ed. Thomas H. Cormen. The MIT press, 2001.