EDA – Estrutura de Dados e Algoritmos Análise de Algoritmos

99 

Full text

(1)

EDA

Estrutura de Dados e Algoritmos

Análise de Algoritmos

(2)

Motivação

• Existem múltiplas soluções para o mesmo problema

• Como decidir qual é a melhor?

(3)

Qual dos dois algoritmos é o melhor?

(4)

Qual dos dois algoritmos é o melhor?

(5)

Análise de Algoritmos

• Que fatores devem ser considerados para escolher qual algoritmo é o melhor?

– Número de Linhas (✖)

– Número de Testes (✖)

– Número de Laços (✖)

– Número de Variáveis (✖)

(6)

Tempo de Execução

• Um algoritmo pode levar tempos diferentes para resolver determinado problema em

(7)

Tempo de Execução

• Depende de

– Características da Máquina

(8)

Análise Assintótica

• É um método matemático de análise para descrever quantitativamente o

(9)

Análise de Algoritmos

(10)

Principais Classes dos Algoritmos

• Constance – c

• Logarítmica – log n

• Linear – n

• Polinomiais – n2, n3...

(11)
(12)
(13)

Comparação

• Como não faz sentido analisar um algoritmo para apenas um determinado conjunto de

entradas e é impossível fazer esta análise para todas as entradas possíveis, normalmente,

considera-se apenas dois cenários

– Melhor caso

• Entrada tendendo a zero (entrada pequena) – Pior caso

(14)
(15)

Ordem de Crescimento

(16)

Exercício

• Ordene as funções por ordem de crescimento

𝑛5 + 132𝑛2

3𝑛 + 128900

400 log 𝑛45𝑛 log 𝑛 132𝑛2

3𝑛

(17)

Relacionando Funções pelo seu

Crescimento

f 𝑛

h 𝑛

(18)

Relacionando Funções pelo seu

Crescimento: Notações Assintóticas

Θ

f 𝑛

O f 𝑛

(19)

Notação Assintótica: Notação

Θ

• Notação teta

• Uma função f 𝑛 é Θ g 𝑛 , i.e. f 𝑛 =

Θ g 𝑛 , se existem três constantes positivas

𝑐1, 𝑐2 e 𝑚 tais que

0 ≤ c1 ∗ g 𝑛 ≤ f 𝑛 ≤ 𝑐2 ∗ g 𝑛 , para todo 𝑛 ≥ 𝑚

(20)
(21)

Exercícios

• Qual o Θ das funções abaixo?

5𝑛2 + 88

2𝑛6 + 5𝑛152 + 8

8𝑛 log 𝑛 + 5𝑛 10000𝑛

(22)

Exercícios

(23)

Exercícios

• Justifique

5𝑛2 + 8𝑛 ∈ Θ 𝑛 ?

6𝑛3 + 2𝑛2 + 1 ∈ Θ 𝑛3 ?

7 log 𝑛 ∈ Θ 𝑛 ?

(24)

Notação Assintótica: Notação O

• Notação Big O

• Uma função f 𝑛 é 𝑂 g 𝑛 , i.e. f 𝑛 =

𝑂 g 𝑛 , se existem duas constantes positivas

𝑐 e 𝑚 tais que

f 𝑛 ≤ 𝑐 ∗ g 𝑛 para todo 𝑛 ≥ 𝑚

(25)
(26)

Exercícios

• Qual o 𝑂 das funções abaixo?

999

5𝑛2 + 999

7𝑛2 + 5𝑛2 + 999100𝑛 + 1

(27)

Exercícios

(28)

Exercícios

• Justifique

– A) log 𝑛 ∈ 𝑂 𝑛 e log 𝑛 ∈ Θ 𝑛

– B) n2 ∈ 𝑂 2𝑛 e n2 ∈ Θ 2𝑛

– C) 𝑛

100 ∈ 𝑂 1 e 𝑛

100 ∈ Θ 1

– D) 𝑛

100 ∈ 𝑂 log 𝑛 e 𝑛

100 ∈ Θ log 𝑛

(29)

Notação Assintótica: Notação

• Notação Ômega

• Uma função f 𝑛 é Ω g 𝑛 , i.e. f 𝑛 =

Ω g 𝑛 , se existem duas constantes positivas

𝑐 e 𝑚 tais que

f 𝑛 ≥ 𝑐 ∗ g 𝑛 , para todo 𝑛 ≥ 𝑚

(30)
(31)

Exercícios

• Qual o Ω das funções abaixo?

8

5𝑛2 + 8

2𝑛6 + 𝑛152 + 8

(32)

Exercícios

(33)

Exercícios

• Justifique

– A) log 𝑛 ∈ 𝑂 𝑛 , log 𝑛 ∈ Θ 𝑛 e log 𝑛 ∈ Ω 𝑛

– B) 𝑛2 ∈ 𝑂 𝑛2 , 𝑛2 ∈ Θ 𝑛2 e 𝑛2 ∈ Ω 𝑛2

– C) 𝑛

103 ∈ 𝑂 𝑛 + 1 , 𝑛

103 ∈ Θ 𝑛 + 1 e 𝑛

103 ∈ Ω 𝑛 + 1

– D) 𝑛 2

2

∈ 𝑂 log 𝑛 , 𝑛 2

2

∈ Θ log 𝑛 e 𝑛 2

(34)

Notação Assintótica: Notação o

• Notação o minúsculo

• Uma função f 𝑛 é 𝑜 g 𝑛 , i.e. f 𝑛 =

𝑜 g 𝑛 , se para qualquer constate 𝑐 > 0 temos

0 ≤ f 𝑛 < 𝑐 ∗ g 𝑛 para todo 𝑛 ≥ 𝑚

(35)

Exercícios

• Qual o 𝑜 das funções abaixo?

999

5𝑛2 + 999

7𝑛2 + 5𝑛2 + 999100𝑛 + 1

(36)

Notação Assintótica: Notação

ω

• Notação ômega minúsculo

• Uma função f 𝑛 é ω g 𝑛 , i.e. f 𝑛 = ω g 𝑛 , se para qualquer constate 𝑐 > 0 temos

0 ≤ 𝑐 ∗ g 𝑛 < f 𝑛 para todo 𝑛 ≥ 𝑚

(37)

Exercícios

• Qual o 𝜔 das funções abaixo?

5𝑛2 + 999

7𝑛2 + 5𝑛2 + 999

100𝑛 + 1

7𝑛 log 𝑛 + 999𝑛

(38)

Convenções

• Princípio da Justeza

– Deve-se utilizar as notações para estabelecer relações com a maior precisão possível

– Evitar usar 𝑛2 = 𝑂 𝑛3 , pois, o mais preciso é 𝑛2 = 𝑂 𝑛2

• Princípio de Simplicidade

– Também deve-se manter as funções o mais simples possível!

(39)

Relação entre as notações

(40)

Propriedades das Comparações

Assintóticas

• Muitas das propriedades relacionais de números reais também se aplicam a comparações

assintóticas

– Transitividade

– Reflexividade

– Simetria

– Simetria de Transposição

• Essas propriedades só se verificam se as funções

(41)

Propriedades das Comparações

Assintóticas

Transitividade (válido também para 𝑂, Ω, 𝑜 e ω)

(42)

Propriedades das Comparações

Assintóticas

Reflexividade (válido também para 𝑂, Ω)

(43)

Propriedades das Comparações

Assintóticas

Simetria

(44)

Propriedades das Comparações

Assintóticas

Simetria da Transposição

f 𝑛 = 𝑂 g 𝑛 se e somente se g 𝑛 = Ω f 𝑛

(45)
(46)

Regras de Simplificação (Soma)

• Se f1 𝑛 = O g1 𝑛 e f2 𝑛 = O g2 𝑛

então f1 𝑛 + f2 𝑛 = O max g1 𝑛 , g2 𝑛

– Exemplos

(47)

Regras de Simplificação (Produto)

• Se f1 𝑛 = O g1 𝑛 e f2 𝑛 = O g2 𝑛 então f1 𝑛 ∗ f2 𝑛 = O g1 𝑛 ∗ g2 𝑛

– Exemplos:

(48)

Revisão Background Matemático

• Progressão aritmética

(𝑎1, 𝑎2, … , 𝑎𝑛) (Ex.: (1, 3, 5, 7, 9, ...)

𝑎𝑛 = 𝑎1 + 𝑛 − 1 ∗ 𝑟𝑆𝑛 = 𝑛∗ 𝑎1+𝑎𝑛

(49)

Revisão Background Matemático

• Progressão Geométrica

(𝑎1, 𝑎2, … , 𝑎𝑛) (Ex.: (2, 4, 8, 16, 32, ...)

𝑎𝑛 = 𝑎1 ∗ 𝑞𝑛−1

𝑆𝑛 = 𝑎1∗(𝑞𝑛−1)

𝑞−1 , se a PG for finita e crescente ( 𝑞 > 1)

𝑆𝑛 = 𝑎1

(50)

Revisão Background Matemático

• Propriedade dos Logaritmos

lg 𝑛 = log 𝑛 = log2 𝑛𝑏log𝑏 𝑎 = 𝑎

log𝑏 𝑎𝑛 = 𝑛 ∗ log 𝑏 𝑎

log𝑎 𝑎 = 1

log𝑐 𝑎 ∗ 𝑏 = log𝑐 𝑎 + log𝑐 𝑏𝑎log𝑏 𝑛 = 𝑛log𝑏 𝑎

log𝑎 𝑏 = log𝑐 𝑏

log𝑐 𝑎

(51)

Revisão Background Matemático

• Propriedade das Exponenciais

𝑎1 = 𝑎

𝑎0 = 1

𝑎−𝑛 = 1 𝑎𝑛

𝑎𝑛 ∗ 𝑎𝑚 = 𝑎𝑛+𝑚

𝑎 ∗ 𝑏 𝑛 = 𝑎𝑛 ∗ 𝑏𝑛

𝑎𝑛 𝑚 = 𝑎𝑛∗𝑚

(52)

Recursividade

• Em ciência da computação, a recursividade é a definição de uma sub-rotina (função ou método) que pode invocar a si mesma.

(53)
(54)

Recursividade

(55)

Recursividade

• Fatorial

• Torres de Hanói

• Ordenação

• Fibonacci

• Pesquisa

(56)

Exercício

• Faça uma função recursiva que calcule e retorne o n-ésimo termo da sequência

Fibonacci. Alguns números desta sequência são: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89

• Faça uma função recursiva que permita somar os elementos de um vetor de inteiros

• Escreva uma função recursiva que inverta

(57)

Análise de Algoritmos Recursivos

• Como estimar o tempo de execução de algoritmo recursivo?

– Método da Substituição

– Método da Árvore de Recursão

• Também chamado de Método Iterativo – Método Mestre

(58)

Relações de Recorrência

• Uma relação de recorrência descreve como o problema é decomposto pelo algoritmo

(59)

Relações de Recorrência

• Algoritmo do Fatorial

(60)

Relações de Recorrência

• Algoritmo do Fatorial (recorrência com mais elegância)

(61)

Relações de Recorrência

• Como resolver essa recorrência?

T 𝑛 = 1 + T 𝑛 − 1 , caso contrário1, se 𝑛 = 0

(62)

Relações de Recorrência

• Em geral, existem três formas de resolver recorrências

– Método da Substituição

– Árvore de Recorrência

(63)

Procedimento:

Método da Substituição

• O método de substituição para resolver recorrências envolve duas etapas:

1. Pressupor a forma da solução (chute!)

(64)

Exemplo

• Calculo do Fatorial

T 𝑛 = T 𝑛 − 1 + 1

(65)

Exemplo - Expandir

• Calculo do Fatorial

T 𝑛 = T 𝑛 − 1 + 1

T 𝑛 = T 𝑛 − 2 + 1 + 1 = T 𝑛 − 2 + 2 T 𝑛 = T 𝑛 − 3 + 1 + 2 = T 𝑛 − 2 + 3

(66)

Exemplo - Conjecturar

• Calculo do Fatorial

T 𝑛 = T 𝑛 − 1 + 1

T 𝑛 = T 𝑛 − 2 + 1 + 1 = T 𝑛 − 2 + 2 T 𝑛 = T 𝑛 − 3 + 1 + 2 = T 𝑛 − 2 + 3

(67)

Exemplo - Conjecturar

• Calculo do Fatorial

T 𝑛 = T 𝑛 − 1 + 1

T 𝑛 = T 𝑛 − 2 + 1 + 1 = T 𝑛 − 2 + 2 T 𝑛 = T 𝑛 − 3 + 1 + 2 = T 𝑛 − 2 + 3

• Para onde estamos indo?

T 𝑛 = T 𝑛 − 𝑘 + 𝑘

(68)

Exemplo - Conjecturar

• Calculo do Fatorial

T 𝑛 = T 𝑛 − 1 + 1

T 𝑛 = T 𝑛 − 2 + 1 + 1 = T 𝑛 − 2 + 2 T 𝑛 = T 𝑛 − 3 + 1 + 2 = T 𝑛 − 2 + 3

• Para onde estamos indo?

T 𝑛 = T 𝑛 − 𝑘 + 𝑘 • Quando essa expansão termina?

𝑛 = 𝑘

(69)

Exemplo - Conjecturar

• Calculo do Fatorial

T 𝑛 = T 𝑛 − 1 + 1

• Para onde estamos indo?

T 𝑛 = T 𝑛 − 𝑘 + 𝑘

• Quando essa expansão termina?

𝑛 = 𝑘

T 𝑛 = T 𝑛 − 𝑛 + 𝑘 = T 0 + 𝑘 = 1 + 𝑘

• O que isso significa? Quanto é T 𝑛 ?

(70)

Exemplo - Verificar

• Como verificar se a nossa solução é a correta?

– Caso base, mais simples 𝑛 = 0

T 𝑛 = 𝑛 + 1 (essa é nossa suposição) T 0 = 0 + 1 = 1 (de acordo com a nossa

suposição)

– Se olharmos na Recorrência Original notaremos que está correto!

(71)

Exemplo - Verificar

• Como verificar se a nossa solução é a correta?

– Passo Indutivo, caso genérico 𝑛 = 𝑘 T 𝑘 = T 𝑘 − 1 + 1

T 𝑘 = T 𝑘 − 2 + 1 + 1 = T 𝑘 − 2 + 2 T 𝑘 = T 𝑘 − 3 + 1 + 2 = T 𝑘 − 2 + 3

(72)

Método da Substituição

• Como fazer um bom “chute”?

– INFELIZMENTE, não há nenhum modo geral de

adivinhar a solução correta para uma recorrência.

– PRESSUPOR (1ª fase) exige experiência e, ocasionalmente, criatividade.

• Se a recorrência for semelhante a uma que você já

(73)

Método da Substituição

• É um método eficiente, porém, só pode ser

usado quando é fácil PRESSUPOR a solução da recorrência

(74)

Exercícios

• Demonstre se

T 𝑛 = T 𝑛 − 1 + 𝑛 é O 𝑛2

T 𝑛 = T 𝑛 − 2 + 1 é Θ 𝑛

(75)

Árvore de Recursão

• Também chamado de Método Iterativo

• Uma árvore de recursão é uma representação gráfica e abstrata para o aumento do custo, de acordo com a redução do problema

• Traçar uma árvore de recursão é um caminho direto para se criar uma boa suposição

• Método ideal para encontrar uma

(76)

Procedimento:

Método da Árvore de Recursão

1. Desenhe a Árvore de Recursão, de acordo com a

relação de recorrência T 𝑛

a) Cada Nó representa o custo de um único subproblema entre as chamadas recursivas.

2. Soma-se os custos dentro de cada nível da Árvore

para obter um conjunto de custos por nível

3. Soma-se os custos de todos os níveis

a) Para isso, é necessário inferir sobre a Altura da Árvore de Recorrência

(77)

Árvore de Recursão

• Relação de Recorrência para o MergeSort

T 𝑛 = 2T 𝑛Θ 1 , se 𝑛 = 1

2 + Θ 𝑛 , se 𝑛 > 1

(78)

Passo 1

• Desenhe a Árvore de Recursão, de acordo com a relação de recorrência T 𝑛

(79)

Árvore de Recursão

T 𝑛

(80)

Árvore de Recursão

𝑐𝑛

(81)

Árvore de Recursão

𝑐𝑛

𝑐𝑛 2

T 𝑛4 T 𝑛4

𝑐𝑛 2

(82)

Árvore de Recursão

𝑐𝑛 𝑐𝑛 2 𝑐𝑛 4

T 𝑛8 T 𝑛8

𝑐𝑛 4

T 𝑛8 T 𝑛8

𝑐𝑛 2 𝑐𝑛

4

T 𝑛8 T 𝑛8

𝑐𝑛 4

T 𝑛8 T 𝑛8

(83)

Árvore de Recursão

𝑐𝑛 20 𝑐𝑛 21 𝑐𝑛 22

T 2𝑛3 T 2𝑛3

𝑐𝑛 22

T 2𝑛3 T 2𝑛3

𝑐𝑛 21

𝑐𝑛 22

T 2𝑛3 T 2𝑛3

𝑐𝑛 22

T 2𝑛3 T 2𝑛3

Até onde essa árvore vai continuar crescendo? Resposta: 𝑛

(84)
(85)

Passo 2

• Soma-se os custos dentro de cada nível da

(86)
(87)

Passo 3

(88)

Árvore de Recursão

(89)

Árvore de Recursão

• Como encontrar o valor da altura?

2𝑛 é o caso mais simples 𝑛

(90)

Árvore de Recursão

𝑛

2ℎ = 1

2ℎ = 𝑛

log 2ℎ = log 𝑛 ℎ ∗ log 2 = log 𝑛

(91)

Árvore de Recursão

• Resolvendo a recorrência

T 𝑛 = ℎ + 1 ∗ 𝑐𝑛|ℎ = log 𝑛 T 𝑛 = log 𝑛 + 1 ∗ 𝑐𝑛

(92)

Árvore de Recursão

• Resolvendo a recorrência

T 𝑛 = ℎ + 1 ∗ 𝑐𝑛|ℎ = log 𝑛 T 𝑛 = log 𝑛 + 1 ∗ 𝑐𝑛

T 𝑛 = 𝑐𝑛 ∗ log 𝑛 + 𝑐𝑛 T 𝑛 = 𝑐 ∗ 𝑛 log 𝑛 + 𝑛

(93)

Exercício

• Resolva as recorrências utilizando o método iterativo

T 𝑛 = 4T 𝑛2 + 𝑛

T 𝑛 = T 𝑛2 + 𝑛2

– Desafio: T 𝑛 = 3T 𝑛

(94)

Método Mestre

• O método mestre fornece uma “receita de bolo” para resolver recorrências da forma

T 𝑛 = 𝑎T nb + f 𝑛

(95)

Método Mestre

• A solução é encontrada ao associar a recorrência com um dos três casos bases

T 𝑛 = 𝑎T 𝑛𝑏 + f 𝑛

• Caso 1: f 𝑛 < 𝑛log𝑏 𝑎 → T 𝑛 = Θ 𝑛log𝑏 𝑎

• Caso 2: f 𝑛 = 𝑛log𝑏 𝑎 → T 𝑛 = Θ f 𝑛 log 𝑛

(96)

Procedimento:

Método Mestre

1. Identifique 𝑎, 𝑏, f 𝑛 e log𝑏 𝑎

2. Verifique se as condições para 𝑎, 𝑏 e f 𝑛 são

satisfeitas

3. Compare f 𝑛 com 𝑛log𝑏 𝑎 para associar ao

caso correto

4. Confirme a qual caso a comparação se refere

(97)

Exercício

• Encontre a solução das recorrências abaixo utilizando o método mestre

T 𝑛 = 9T 𝑛3 + 𝑛

(98)

Exercício

• É possível utilizar o método mestre com as recorrências a seguir?

T 𝑛 = 2𝑛T 𝑛

2 + 𝑛𝑛

T 𝑛 = 12 T 𝑛2 + 𝑛1

T 𝑛 = 64T 𝑛8 − 𝑛2 log 𝑛

(99)

Próximas Aulas

• Algoritmos de Busca

Figure

Updating...

References

Updating...

Download now (99 página)