Escolar Documentos
Profissional Documentos
Cultura Documentos
ANÁLISE DE
ALGORITMOS
UNIDADE 2 –
COMPLEXIDADE DE
ALGORITMOS E
RECORRÊNCIAS
Autor: Thiago Nascimento Rodrigues
Revisor: Bruno Carreira Coutinho Silva
INICIAR
Introdução
Caro(a) estudante,
Nesta unidade, vamos conhecer uma notação usada para retratar a eficiência de um
algoritmo tendo como base o número de operações executadas por ele e o quanto esse
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 1/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
Bons estudos!
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 2/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
concluir que #PraCegoVer g(n) : gê de êne seja um delimitador justo para f(n)
#PraCegoVer : éfe de êne . Nesse caso, f(n) #PraCegoVer : éfe de êne cresce na
mesma proporção que g(n) #PraCegoVer : gê de êne e dentro dos limites superiores e
inferiores definidos por fatores constantes. A título de exemplo, essa é a conclusão
extraída do fato de f(n) = pn² + qn + r #PraCegoVer : éfe de êne é igual a pê vezes êne
ao quadrado mais quê vezes êne mais érre ser tanto O (n²) como Ω( n² ) #PraCegoVer
: ó de êne ao quadrado como ômega de êne ao quadrado.
VOCÊ SABIA?
O limite assintótico superior provido pela notação O pode ou não ser um limite
assintótico justo. O limite 2 n² = O (n²) #PraCegoVer : dois êne ao quadrado é
igual a ó de êne ao quadrado é assintoticamente justo, mas o limite 2 n = (n2)
#PraCegoVer : dois êne é igual a êne ao quadrado não é. Para essa situação,
pode-se usar a notação o (do inglês, little-oh , ou pequeno o , em português) para
denotar um limite superior que não é assintoticamente justo. Formalmente, o(g(n))
#PraCegoVer : é de gê de êne é definido como um conjunto :
Para cenários como o exemplo acima, a notação Theta (Θ) é utilizada para expressar
que uma função f(n) #PraCegoVer : éfe de êne é tanto O(g(n)) #PraCegoVer : ó de gê
de êne quanto Ω ( g(n)) #PraCegoVer : ômega de gê de êne. De modo sucinto, f(n) =
Θ(g(n)) #PraCegoVer : theta de gê de êne e g(n) #PraCegoVer : gê de êne é dita ser
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 3/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
um limite assintótico firme ou justo para f(n) #PraCegoVer : éfe de êne. Considerando a
função f(n) = pn² + qn + r #PraCegoVer : éfe de êne é igual a pê vezes êne ao
quadrado mais quê vezes êne mais érre , pode-se afirmar que f(n) = Θ (n2)
#PraCegoVer : éfe de êne é igual a theta de êne ao quadrado. Mais formalmente:
. E o gráfico (c) apresenta um limite inferior para f(n) #PraCegoVer : éfe de êne de
acordo com um fator constante. É possível afirmar que f(n) = Ω (g(n)) #PraCegoVer : éfe
de êne é igual a ômega de gê de êne se existirem constantes positivas n
0
#PraCegoVer : êne índice zero e c tais que, para toda região à direita de n
0
#PraCegoVer : êne índice zero , o valor de f(n) #PraCegoVer : éfe de êne sempre será
maior que cg(n) #PraCegoVer : cê gê de êne .
VOCÊ SABIA?
A análise assintótica, em especial a notação Θ #PraCegoVer : theta , é uma
ferramenta fundamental para a escolha de um algoritmo para um dado problema.
No entanto, cabe considerar que essa análise “esconde” fatores assintoticamente
irrelevantes, mas que em alguns casos merecem ser considerados. Por exemplo,
um algoritmo com tempo de execução da ordem de 10¹ºº é Θ(n) #PraCegoVer :
dez elevado a cem é theta de êne , ou seja, é assintoticamente melhor que
outro com tempo 10 nlog(n) #PraCegoVer : dez êne log de êne . Contudo, 10¹ºº
#PraCegoVer : dez elevado a cem é o número estimado por alguns astrônomos
como limite superior para a quantidade de átomos existentes no universo
observável (HELMENSTINE, 2019).
Muitas propriedades relacionais que podem ser observadas nos números reais podem
ser igualmente aplicadas nas comparações assintóticas. Considerando as funções f(n)
#PraCegoVer : éfe de êne e g(n) #PraCegoVer : gê de êne assintoticamente positivas,
as seguintes propriedades de transitividade, reflexividade e simetria são válidas.
Juntamente com essas, outra relações complementares também são válidas com a
notação Θ #PraCegoVer : theta conforme listado a seguir:
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 5/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
f(n) = Θ(g(n)) ↔ g(n) = Θ(f(n)) (Simetria) #PraCegoVer: éfe de êne é igual theta
de gê de êne que é que corresponde a gê de êne igual a theta de éfe de êne
Θ(c · f(n)) = Θ(f(n)) #PraCegoVer: theta de cê vezes éfe de êne é igual a theta de
éfe de êne
Θ(f(n)) · Θ(g(n)) = Θ(f(n) · g(n)) #PraCegoVer: theta de éfe de êne vezes theta de
gê de êne é igual a theta de éfe de êne vezes gê de êne
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 6/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
VAMOS PRATICAR?
Para consolidar o entendimento da notação theta (Θ), vamos avaliar se a
n + 1 n
relação f(n) = 2 = Θ(2 ) #PraCegoVer: éfe de êne é igual a dois
elevado a êne mais um , que por sua vez é igual a theta de dois elevado a
êne é verdadeira. Boa parte das relações envolvendo a notação Theta podem
ser verificadas fazendo uso de sua definição. Nesse caso, vamos conferir se
n n
f(n) = O(2 ) e f(n) = Ω(2 ) #PraCegoVer: éfe de êne é igual a ó de dois
elevado a êne e éfe de êne é igual a ômega de dois elevado a êne .
n+1 n
f(n) = 2 = Θ(2 ) #PraCegoVer : éfe de êne é igual a dois elevado a
êne mais um, que por sua vez é igual a theta de dois elevado a êne é
verdadeira. Boa parte das relações envolvendo a notação Theta podem
ser verificadas fazendo uso de sua definição. Nesse caso, vamos conferir
n n
se f(n) = O(2 ) e f(n) = Ω(2 ) #PraCegoVer : éfe de êne é igual a ó de
dois elevado a êne e éfe de êne é igual a ômega de dois elevado a
êne .
n
f(n) = O(2 ) #PraCegoVer : éfe de êne é igual a ó de dois elevado a
êne ? Essa igualdade é verdadeira se existir uma constante c tal que,
para todo n suficientemente grande, f(n) ≤ cg(n) #PraCegoVer : éfe de
n +1 n
êne é menor ou igual a cê gê de êne . Observando que 2 =2·2
#PraCegoVer : dois elevado a êne mais um é igual ao produto de dois
n n
vezes dois elevado a êne , temos que 2 · 2 ≤c·2 #PraCegoVer : o
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 7/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 8/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
a quatro e cê índice dois é igual a cinco e uma êne índice zero é igual a um , de
modo que c n ≤ 4n + 1 ≤ c n #PraCegoVer : o produto de cê índice um por êne é
1 2
menor ou igual a quatro êne mais um, que por sua vez é menor ou igual ao produto
de cê índice dois por êne para todos os valores de n maiores ou iguais a n
0
#PraCegoVer : êne índice zero . Em outras palavras, 4n + 1 = Θ(n) #PraCegoVer :
quatro êne mais um é igual a theta de êne .
Figura 1 – Representação dos três primeiros níveis de recorrência para a construção do fractal tetra-círculo.
Fonte: MELO; LEIVAS, 2015, p. 3. (Adaptada).
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 9/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
onde os três pontos representam uma abreviatura para o produto de todos os números
compreendidos entre n – 3 e 2 #PraCegoVer : êne menos três e dois :
E assim por diante. Fazendo uso de uma notação matemática, a função fatorial de um
número pode ser definida em termos de um caso mais simples de si mesma, o que é
chamado de definição recursiva . O seguinte sistema de equações descreve a definição
recursiva da função fatorial.
VOCÊ SABIA?
Um clássico exemplo de aplicação do conceito de recursão pode ser
encontrado no nome de um tradicional sistema operacional de software
livre conhecido como GNU. O próprio site do projeto explica que o
nome GNU é um acrônimo recursivo para GNU’s Not Unix! , cuja
tradução em português seria GNU não é Unix! (GNU, 2020).
O exemplo a seguir descreve como a definição recursiva da função fatorial pode ser
usada para avaliar 5! #PraCegoVer : cinco fatorial . A definição indica que 5!
#PraCegoVer : cinco fatorial corresponde a 5 · 4! #PraCegoVer : cinco vezes quatro
fatorial . Logo, antes de se proceder com a avaliação de 5! #PraCegoVer : cinco
fatorial , é preciso calcular o valor de 4! #PraCegoVer : quatro fatorial . Aplicando a
definição da função fatorial mais uma vez, obtém-se que 4! = 4 · 3! #PraCegoVer :
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 10/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
quatro fatorial é igual a quatro vezes três fatorial êne . Então, é preciso avaliar 3!
#PraCegoVer : três fatorial antes de avançar com o cálculo de 4! #PraCegoVer :
quatro fatorial . O processo deve ser repetido até que a função alcance o caso base 0!
#PraCegoVer : zero fatorial . Nesse ponto, um valor definitivo é obtido, ou seja, 1 (0! =
1) #PraCegoVer : um de zero fatorial igual a um e, na sequência, todas as demais
avaliações anteriores que ficaram pendentes (1!, 2!, 3!, 4! e 5!) #PraCegoVer : um
fatorial, dois fatorial, três fatorial e cinco fatorial são calculadas. O valor final
corresponde ao resultado da avaliação de 5! #PraCegoVer : cinco fatorial.
Para uma recursão funcionar, dois elementos precisam existir, conforme descrito nas
abas a seguir.
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 11/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 12/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
A seguir, o pseudocódigo apresenta como o cálculo de uma função exponencial pode ser
implementado por meio de um algoritmo recursivo. O subproblema, ou chamada
n–1
recursiva, está relacionado ao cálculo de a (linha 4) #PraCegoVer : á elevado a êne
menos um (linha quatro) . O caso base corresponde à solução direta da menor
instância do problema (linha 2).
Algoritmo exponencial
Entrada Saída
Conforme já descrito, uma recorrência corresponde a uma equação (ou inequação) que
descreve uma função em termos de seu próprio valor aplicado a entradas de menor
tamanho. Recorrências são particularmente utilizadas como ferramentas básicas para a
análise de algoritmos recursivos. Em função disso, elas precisam ser resolvidas a fim de
possibilitarem que o comportamento assintótico de algoritmos dessa classe seja
avaliado. Três principais métodos para a solução de recorrências são (CORMEN et al.,
2009):
Método da substituição;
Árvores de recursão;
Teorema mestre.
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 13/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
Iteração n – T(n/3/3 … /3 )
No primeiro passo do método, a solução proposta deve ser substituída pela função ao
aplicar a hipótese indutiva a valores menores; daí o nome método de substituição .
Embora o método seja considerado eficaz, ele depende da sugestão de uma fórmula
para a recorrência. De posse da proposta de solução, o uso do método de substituição
permite que sejam estabelecidos limites superiores ou inferiores em uma recorrência.
Como primeiro exemplo, o método será utilizado para se determinar um limite superior
para a recorrência:
NÃO HOMOGÊNEAS
Além de depender dos termos anteriores, cada elemento também está
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 14/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
Uma proposta inicial de solução a ser testada é T(n) = O(n log n) #PraCegoVer : tê de
2
êne é igual a ó de êne com logaritmo na base dois com êne . O método da
substituição exige que a desigualdade T(n) ≤ cnlog (n) #PraCegoVer : tê de êne menor
2
ou igual a cê êne logaritmo na base dois de êne seja provada para uma escolha
apropriada de valor da constante c > 0 #PraCegoVer : cê maior que zero . A aplicação
do método poderia começar assumindo que esse limite é válido para todos os valores
positivos m < n #PraCegoVer : ême menor que êne , em particular para m = n/2
#PraCegoVer : ême é igual a êne sobre dois , o que geraria a seguinte desigualdade
T(n/2) ≤ c(n/2)log (n/2) #PraCegoVer : tê de êne sobre dois é igual a cê vezes êne
2
sobre dois e isso vezes o logaritmo de êne sobre dois na base dois . O próximo
passo é substituir essa última desigualdade na recorrência a ser resolvida conforme
desenvolvido a seguir. Importante observar que a simplificação do passo (4) para o passo
(5) é verdadeira, assumindo-se c ≥ 1 #PraCegoVer : cê maior ou igual a um .
Apesar da primeira parte da indução matemática ter sido mostrada, ainda é preciso
provar o caso base da indução, ou seja, é preciso demonstrar que T(1) = 1 #PraCegoVer
: tê de um é igual a um . Fazendo a substituição na solução proposta, verifica-se que o
caso base não é válido: T(1) = c * 1 * log (1) = 0 ≠ 1 #PraCegoVer : tê de um é igual
2
ao produto de cê com um e com o logaritmo de um na base dois, e isso é igual a
zero, que por sua vez é diferente de um (pois, log (1) = 0) #PraCegoVer : logaritmo
2
de um na base dois é igual a zero . Contudo, como o objetivo é definir o
comportamento assintótico da recorrência, esse tipo de análise exige apenas que T(n) ≤
cnlog (n) #PraCegoVer : tê de êne é menor ou igual ao produto de cê com êne e
2
com o logaritmo de êne na base dois para algum c escolhido adequadamente. Logo,
tomando c = 2 #PraCegoVer : cê é igual a dois e aplicando na solução proposta se
obtém T(2) ≤ c * 2 * log (2) #PraCegoVer : tê de dois é menor ou igual ao produto de
2
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 15/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
cê com dois e com o logaritmo de dois na base dois , o que prova o caso base da
indução e válida a solução proposta para a recorrência.
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 16/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
Para encontrar uma fórmula fechada, uma técnica possível de ser aplicada é desenvolver
k
ou “desenrolar” a recorrência e escrever 2 #PraCegoVer : dois elevado a cá no lugar
de n (substituição de variável):
VAMOS PRATICAR?
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 17/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
Defina valores iniciais de F(n) #PraCegoVer: éfe de êne levando em conta que
1 2 3 4
os valores de n pertencem ao conjunto {2 , 2 , 2 , 2 , …} #PraCegoVer:
dois elevado a um, dois elevado a dois, dois elevado a três, dois elevado
a quatro etc. ;
k
Faça a substituição da variável n por 2 #PraCegoVer: êne por dois elevado
a cá ;
Embora o método da substituição seja uma técnica muito objetiva de provar se uma
solução proposta para uma recorrência está correta ou não, esse método apresenta uma
grande limitação: a sua dependência por uma boa sugestão ou um bom “chute” de
solução. Uma classe comum de recorrências é aquela que envolve a geração de
subproblemas como reduções a um fator do problema original – essas costumam ser
recorrências complexas de se propor uma solução. Por exemplo, não é trivial de se
“chutar” que a solução de uma recorrência T(n) #PraCegoVer : tê de êne que envolva
um termo T(n/4) #PraCegoVer : tê de êne sobre quatro somado a Θ( n 2)
2
#PraCegoVer : theta de êne ao quadrado é limitada superiormente por n . Esse é o
caso de várias outras recorrências.
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 18/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 19/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
Com essa representação do problema de ordenação do vetor, é possível ver que cada
expansão da recorrência acrescenta n termos ao resultado final. Consequentemente,
para resolver a recorrência, é preciso achar a altura da árvore. O Diagrama 3 (d) oferece
uma visão gráfica desse processo e mostra que a altura é dada por log n #PraCegoVer
2
: logaritmo de êne na base dois . Logo, a soma de todos os termos da árvore resulta
em nlog (n) #PraCegoVer : êne logaritmo de êne na base dois que é uma solução
2
fechada para a recorrência, ou seja, T(n) = O(nlog n) #PraCegoVer : tê é igual a ó de
2
êne logaritmo de êne na base dois .
Embora uma solução fechada para recorrências possa ser obtida a partir de árvores de
recursão, a solução constitui, na realidade, apenas uma possibilidade ou um “bom chute”
de resolução da recorrência. Isso quer dizer que a solução gerada a partir dessa técnica
precisa ser validada. Um modo de realizar essa verificação é por meio do método de
substituição apresentado previamente. Logo, no caso do problema de ordenação
recursiva de um vetor de inteiros, o caso base a ser verificado é T(1) = 0 #PraCegoVer :
tê de um é igual a zero , o que é confirmado de forma direta – T(1) = 1 • log 1 = 1 • 0 =
2
0 #PraCegoVer : tê de um é igual ao produto de um com o logaritmo de um na base
dois, que por sua vez é igual ao produto de um com zero que é igual a zero . Já a
hipótese de indução é:
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 20/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
Síntese
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 21/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
SAIBA MAIS
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 22/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
Referências bibliográficas
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 23/24
27/02/2023, 16:56 Unidade 2 - Análise de algoritmos
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 24/24