45
1 Aula 01 – Introdução Custo de um algoritmo, Funções de complexidad e Recursão MC3305 Algoritmos e Estruturas de Dados II Prof. Jesús P. Mena-Chalco [email protected] 2Q-2015

Custo de um algoritmo, Funções de complexidad e Recursão

  • Upload
    dotram

  • View
    228

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Custo de um algoritmo, Funções de complexidad e Recursão

1

Aula 01 – IntroduçãoCusto de um algoritmo, Funções de complexidad e Recursão

MC3305Algoritmos e Estruturas de Dados II

Prof. Jesús P. [email protected]

2Q-2015

Page 2: Custo de um algoritmo, Funções de complexidad e Recursão

2

Custo de um algoritmo

Page 3: Custo de um algoritmo, Funções de complexidad e Recursão

3

Estrutura de dados

Estrutura de dados e algoritmos estão intimamente ligados:

Não se pode estudar ED sem considerar os algoritmos associados a elas;

Asssim como a escolha dos algoritmos (em geral) depende da representação e da ED.

Page 4: Custo de um algoritmo, Funções de complexidad e Recursão

4

(1) Análise de um algoritmo particular

Qual é o custo de usar um dado algoritmo para resolver um problema específico?

Características que devem ser investigadas:Tempo de execução.Quantidade de memória.

Page 5: Custo de um algoritmo, Funções de complexidad e Recursão

5

(2) Análise de uma classe de algoritmos

Qual é o algoritmo de menos custo possível para resolver um problema particular?

Toda uma familia de algoritmos é investigada.

Procura-se identificar um que seja o melhor possível.

Colocam-se limites para a complexidade computacional dos algoritmos pertencentes à classe.

Page 6: Custo de um algoritmo, Funções de complexidad e Recursão

6

Custo de um algoritmo

Se conseguirmos determinar o menor custo possível para resolver problemas de uma dada classe,então teremos amedida da dificuldade inerente para resolver o problema.

Quando um algoritmo é igual ao menor custo possível, o algoritmo é ótimo para a medida de custo considerada.

Podem existir vários algoritmos para resolver um mesmo problema.→ Se a mesma medida de custo é aplicada a diferentes algoritmos então é possível compará-los e escolher o mais adequado.

Page 7: Custo de um algoritmo, Funções de complexidad e Recursão

7

Medida de custo pela execução de um programa em uma plataforma real

Page 8: Custo de um algoritmo, Funções de complexidad e Recursão

8

(1) Medida de custo pela execução de um programa em uma plataforma real

Tais medidas são bastante inadequadas e os resultados jamais devem ser generalizados:

Os resultados são dependentes do compilador que pode favorecer algumas construções em detrimento de outras;

Os resultados dependem de hardware;

Quanto grandes quantidades de memória são utilizadas, as medidas de tempo podem depender deste aspecto.

Apesar disso, há argumentos a favor de se obterem medidas reais de tempo:

Exemplo: Quando há vários algoritmos distintos para resolver o problema;

Assim, são considerados tanto os custos reais das operações como os custos não aparentes, tais como alocação de memória, indexação, carga, dentre outros.

Page 9: Custo de um algoritmo, Funções de complexidad e Recursão

9

Medida de custo por meio de um modelo matemático

Page 10: Custo de um algoritmo, Funções de complexidad e Recursão

10

(2) Medida de custo por meio de um modelo matemático

Page 11: Custo de um algoritmo, Funções de complexidad e Recursão

11

(2) Medida de custo por meio de um modelo matemático

Usa um modelo matemático baseado em um computador idealizado.

Deve ser especificado o conjunto de operações e seus custos de execuções.

É mais usual ignorar o custo de algumas das operações e considerar apenas as mais significantes.

Em algoritmos de ordenação:

Consideramos o conjunto de comparações entre os elementos do conjunto a ser ordenado e ignoramos as operações aritméticas, de atribuição e manipulação de índices, caso existam.

Page 12: Custo de um algoritmo, Funções de complexidad e Recursão

12

Função de complexidade

Page 13: Custo de um algoritmo, Funções de complexidad e Recursão

13

Função de complexidade

Para medir o custo de execução de um algoritmo, é comum definir uma função de custo ou função de complexidade f.

Função de complexidade de tempo: mede o tempo necessário para executar um algoritmo para um problema de tamanho n.

Função de complexidade de espaço: mede a memória necessária para executar um algoritmo para um problema de tamanho n.

Page 14: Custo de um algoritmo, Funções de complexidad e Recursão

14

Comportamento assintótico de funções

A análise de algoritmos é realizada paravalores grandes de n.

Estudaremos o comportamento assintótico das funções de custo.

O comportamento assintótico de f(n) representa o limite do comportamento de custo, quando n cresce.

Page 15: Custo de um algoritmo, Funções de complexidad e Recursão

15

Dominação assintótica

Definição:Uma função f(n) domina assintoticamente uma outra função g(n) se existem duas constantes positivas c e tais que, para , temos:

Page 16: Custo de um algoritmo, Funções de complexidad e Recursão

16

Notação assintótica de funções

Existem 3 notações assintóticas de funções:

Notação

Notação

Notação

Page 17: Custo de um algoritmo, Funções de complexidad e Recursão

17

Notação

g(n) é um limite assintótico firme de f(n)

Page 18: Custo de um algoritmo, Funções de complexidad e Recursão

18

Notação

f(n) é da ordem no máximo g(n)

O é usada para expressar o tempo de execução de um algoritmo no pior caso, está se definindo também o limite (superior) do tempo de execução desse algoritmo para todas as entradas.

Page 19: Custo de um algoritmo, Funções de complexidad e Recursão

19

Notação

Omega: Define um limite inferior para a função, por um fator constante.

g(n) é um limite assintoticamente inferior

Page 20: Custo de um algoritmo, Funções de complexidad e Recursão

20

Teorema

Page 21: Custo de um algoritmo, Funções de complexidad e Recursão

21

Comparação de programas

Page 22: Custo de um algoritmo, Funções de complexidad e Recursão

22

Hierarquias de funções

A seguinte herarquia de funções pode ser definida do ponto de vista assintótico:

onde e são constantes arbitrárias com

Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro (UFMG)

Page 23: Custo de um algoritmo, Funções de complexidad e Recursão

23

ATIVIDADE 01: Hierarquias de funções

Page 24: Custo de um algoritmo, Funções de complexidad e Recursão

24

ATIVIDADE 01: Hierarquias de funções

Cúbico

Quadrático

Quadrático

Logaritmico

Maior hierarquia

Menor hierarquia

Ordem decrescimento

Page 25: Custo de um algoritmo, Funções de complexidad e Recursão

25

Page 26: Custo de um algoritmo, Funções de complexidad e Recursão

26

Page 27: Custo de um algoritmo, Funções de complexidad e Recursão

27

Page 28: Custo de um algoritmo, Funções de complexidad e Recursão

28

Page 29: Custo de um algoritmo, Funções de complexidad e Recursão

29

Page 30: Custo de um algoritmo, Funções de complexidad e Recursão

30

Page 31: Custo de um algoritmo, Funções de complexidad e Recursão

31(*) Fonte: http://algs4.cs.princeton.edu/14analysis/

Page 32: Custo de um algoritmo, Funções de complexidad e Recursão

32

ATIVIDADE 02: Ordem de crescimento

Page 33: Custo de um algoritmo, Funções de complexidad e Recursão

33

ATIVIDADE 02: Ordem de crescimento

Linear 

G1(N) = 2N­1

Linear 

G2(N) = 2N­1

Linearithmic

G3(N) = N(lg(N)+1)

Page 34: Custo de um algoritmo, Funções de complexidad e Recursão

34

Anuncio de cacao com uma imagem recursiva.

Page 35: Custo de um algoritmo, Funções de complexidad e Recursão

35

Recursão

Page 36: Custo de um algoritmo, Funções de complexidad e Recursão

36

Recursão

O conceito de recursão é de fundamental importância em computação!

Muitos problemas computacionais têm a seguinte propriedade:

Cada instância do problema contém uma instância menor do mesmo problema.→ Dizemos que esses problemas têm estrutura recursiva.

(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008.

Page 37: Custo de um algoritmo, Funções de complexidad e Recursão

37

Recursão

Para resolver um tal problema é natural aplicar o seguinte método:

Se a instância em questão é pequena:→ Resolva-a diretamente

(use força bruta se necessário)

Senão→ Reduza-a a uma instância menor do mesmo problema→ Aplique o método à instância menor

e volte à instância original.

A aplicação do método produz um algoritmo recursivo.

(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008.

Page 38: Custo de um algoritmo, Funções de complexidad e Recursão

38

Números de Fibonacci

Page 39: Custo de um algoritmo, Funções de complexidad e Recursão

39

Números de Fibonacci

Page 40: Custo de um algoritmo, Funções de complexidad e Recursão

40

Números de Fibonacci

Quantas vezes é chamada a função Fib para n dado como entrada?

Page 41: Custo de um algoritmo, Funções de complexidad e Recursão

41

Números de Fibonacci

Page 42: Custo de um algoritmo, Funções de complexidad e Recursão

42

Números de Fibonacci

(*) fonte http://britton.disted.camosun.bc.ca/fibslide/jbfibslide.htm

Page 43: Custo de um algoritmo, Funções de complexidad e Recursão

43

Números de Fibonacci

Page 44: Custo de um algoritmo, Funções de complexidad e Recursão

44

Números de Fibonacci

Page 45: Custo de um algoritmo, Funções de complexidad e Recursão

45