EDA
–
Estrutura de Dados e Algoritmos
Análise de Algoritmos
Motivação
• Existem múltiplas soluções para o mesmo problema
• Como decidir qual é a melhor?
Qual dos dois algoritmos é o melhor?
Qual dos dois algoritmos é o melhor?
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 (✖)
Tempo de Execução
• Um algoritmo pode levar tempos diferentes para resolver determinado problema em
Tempo de Execução
• Depende de
– Características da Máquina
Análise Assintótica
• É um método matemático de análise para descrever quantitativamente o
Análise de Algoritmos
Principais Classes dos Algoritmos
• Constance – c
• Logarítmica – log n
• Linear – n
• Polinomiais – n2, n3...
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
Ordem de Crescimento
Exercício
• Ordene as funções por ordem de crescimento
– 𝑛5 + 132𝑛2
– 3𝑛 + 12 – 8900
– 400 log 𝑛 – 45𝑛 log 𝑛 – 132𝑛2
– 3𝑛
Relacionando Funções pelo seu
Crescimento
f 𝑛
h 𝑛
Relacionando Funções pelo seu
Crescimento: Notações Assintóticas
Θ
f 𝑛
O f 𝑛
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 𝑛 ≥ 𝑚
Exercícios
• Qual o Θ das funções abaixo?
– 5𝑛2 + 8 – 8
– 2𝑛6 + 5𝑛152 + 8
– 8𝑛 log 𝑛 + 5𝑛 – 10000𝑛
Exercícios
Exercícios
• Justifique
– 5𝑛2 + 8𝑛 ∈ Θ 𝑛 ?
– 6𝑛3 + 2𝑛2 + 1 ∈ Θ 𝑛3 ?
– 7 log 𝑛 ∈ Θ 𝑛 ?
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 𝑛 ≥ 𝑚
Exercícios
• Qual o 𝑂 das funções abaixo?
– 999
– 5𝑛2 + 999
– 7𝑛2 + 5𝑛2 + 999 – 100𝑛 + 1
Exercícios
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 𝑛
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 𝑛 ≥ 𝑚
Exercícios
• Qual o Ω das funções abaixo?
– 8
– 5𝑛2 + 8
– 2𝑛6 + 𝑛152 + 8
Exercícios
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
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 𝑛 ≥ 𝑚
Exercícios
• Qual o 𝑜 das funções abaixo?
– 999
– 5𝑛2 + 999
– 7𝑛2 + 5𝑛2 + 999 – 100𝑛 + 1
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 𝑛 ≥ 𝑚
Exercícios
• Qual o 𝜔 das funções abaixo?
– 5𝑛2 + 999
– 7𝑛2 + 5𝑛2 + 999
– 100𝑛 + 1
– 7𝑛 log 𝑛 + 999𝑛
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!
Relação entre as notações
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
Propriedades das Comparações
Assintóticas
• Transitividade (válido também para 𝑂, Ω, 𝑜 e ω)
Propriedades das Comparações
Assintóticas
• Reflexividade (válido também para 𝑂, Ω)
Propriedades das Comparações
Assintóticas
• Simetria
Propriedades das Comparações
Assintóticas
• Simetria da Transposição
– f 𝑛 = 𝑂 g 𝑛 se e somente se g 𝑛 = Ω f 𝑛
Regras de Simplificação (Soma)
• Se f1 𝑛 = O g1 𝑛 e f2 𝑛 = O g2 𝑛
então f1 𝑛 + f2 𝑛 = O max g1 𝑛 , g2 𝑛
– Exemplos
Regras de Simplificação (Produto)
• Se f1 𝑛 = O g1 𝑛 e f2 𝑛 = O g2 𝑛 então f1 𝑛 ∗ f2 𝑛 = O g1 𝑛 ∗ g2 𝑛
– Exemplos:
Revisão Background Matemático
• Progressão aritmética
– (𝑎1, 𝑎2, … , 𝑎𝑛) (Ex.: (1, 3, 5, 7, 9, ...)
– 𝑎𝑛 = 𝑎1 + 𝑛 − 1 ∗ 𝑟 – 𝑆𝑛 = 𝑛∗ 𝑎1+𝑎𝑛
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
Revisão Background Matemático
• Propriedade dos Logaritmos
– lg 𝑛 = log 𝑛 = log2 𝑛 – 𝑏log𝑏 𝑎 = 𝑎
– log𝑏 𝑎𝑛 = 𝑛 ∗ log 𝑏 𝑎
– log𝑎 𝑎 = 1
– log𝑐 𝑎 ∗ 𝑏 = log𝑐 𝑎 + log𝑐 𝑏 – 𝑎log𝑏 𝑛 = 𝑛log𝑏 𝑎
– log𝑎 𝑏 = log𝑐 𝑏
log𝑐 𝑎
Revisão Background Matemático
• Propriedade das Exponenciais
– 𝑎1 = 𝑎
– 𝑎0 = 1
– 𝑎−𝑛 = 1 𝑎𝑛
– 𝑎𝑛 ∗ 𝑎𝑚 = 𝑎𝑛+𝑚
– 𝑎 ∗ 𝑏 𝑛 = 𝑎𝑛 ∗ 𝑏𝑛
– 𝑎𝑛 𝑚 = 𝑎𝑛∗𝑚
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.
Recursividade
Recursividade
• Fatorial
• Torres de Hanói
• Ordenação
• Fibonacci
• Pesquisa
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
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
Relações de Recorrência
• Uma relação de recorrência descreve como o problema é decomposto pelo algoritmo
Relações de Recorrência
• Algoritmo do Fatorial
Relações de Recorrência
• Algoritmo do Fatorial (recorrência com mais elegância)
Relações de Recorrência
• Como resolver essa recorrência?
– T 𝑛 = 1 + T 𝑛 − 1 , caso contrário1, se 𝑛 = 0
Relações de Recorrência
• Em geral, existem três formas de resolver recorrências
– Método da Substituição
– Árvore de Recorrência
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!)
Exemplo
• Calculo do Fatorial
T 𝑛 = T 𝑛 − 1 + 1
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
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
⁞
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 𝑛 − 𝑘 + 𝑘
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?
𝑛 = 𝑘
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 𝑛 ?
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!
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
⁞
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á
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
Exercícios
• Demonstre se
– T 𝑛 = T 𝑛 − 1 + 𝑛 é O 𝑛2
– T 𝑛 = T 𝑛 − 2 + 1 é Θ 𝑛
Á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
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
Árvore de Recursão
• Relação de Recorrência para o MergeSort
T 𝑛 = 2T 𝑛Θ 1 , se 𝑛 = 1
2 + Θ 𝑛 , se 𝑛 > 1
Passo 1
• Desenhe a Árvore de Recursão, de acordo com a relação de recorrência T 𝑛
Árvore de Recursão
T 𝑛
Árvore de Recursão
𝑐𝑛
Árvore de Recursão
𝑐𝑛
𝑐𝑛 2
T 𝑛4 T 𝑛4
𝑐𝑛 2
Árvore de Recursão
𝑐𝑛 𝑐𝑛 2 𝑐𝑛 4T 𝑛8 T 𝑛8
𝑐𝑛 4
T 𝑛8 T 𝑛8
𝑐𝑛 2 𝑐𝑛
4
T 𝑛8 T 𝑛8
𝑐𝑛 4
T 𝑛8 T 𝑛8
⁞
Árvore de Recursão
𝑐𝑛 20 𝑐𝑛 21 𝑐𝑛 22T 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: 𝑛
Passo 2
• Soma-se os custos dentro de cada nível da
Passo 3
Árvore de Recursão
Árvore de Recursão
• Como encontrar o valor da altura?
– 2𝑛ℎ é o caso mais simples 𝑛
Árvore de Recursão
𝑛
2ℎ = 1
2ℎ = 𝑛
log 2ℎ = log 𝑛 ℎ ∗ log 2 = log 𝑛
Árvore de Recursão
• Resolvendo a recorrência
T 𝑛 = ℎ + 1 ∗ 𝑐𝑛|ℎ = log 𝑛 T 𝑛 = log 𝑛 + 1 ∗ 𝑐𝑛
Árvore de Recursão
• Resolvendo a recorrência
T 𝑛 = ℎ + 1 ∗ 𝑐𝑛|ℎ = log 𝑛 T 𝑛 = log 𝑛 + 1 ∗ 𝑐𝑛
T 𝑛 = 𝑐𝑛 ∗ log 𝑛 + 𝑐𝑛 T 𝑛 = 𝑐 ∗ 𝑛 log 𝑛 + 𝑛
Exercício
• Resolva as recorrências utilizando o método iterativo
– T 𝑛 = 4T 𝑛2 + 𝑛
– T 𝑛 = T 𝑛2 + 𝑛2
– Desafio: T 𝑛 = 3T 𝑛
Método Mestre
• O método mestre fornece uma “receita de bolo” para resolver recorrências da forma
T 𝑛 = 𝑎T nb + f 𝑛
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 𝑛
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
Exercício
• Encontre a solução das recorrências abaixo utilizando o método mestre
– T 𝑛 = 9T 𝑛3 + 𝑛
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 𝑛
Próximas Aulas
• Algoritmos de Busca