Escolar Documentos
Profissional Documentos
Cultura Documentos
ANÁLISE DE
ALGORITMOS
UNIDADE 3 –
RECORRÊNCIAS E
COMPLEXIDADE DE
ALGORITMOS DE
ORDENAÇÃO
Autor: Thiago Nascimento Rodrigues
Revisor: Bruno Carreira Coutinho Silva
INICIAR
Introdução
Caro(a) estudante,
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 1/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
Bons estudos!
pode ser considerado. Se n > 1 [ #PraCegoVer : n maior que 1], o problema pode ser
dividido em dois: calcular a soma dos primeiros ⌊n/2⌋ [ #PraCegoVer : piso de n sobre 2]
números e calcular a soma dos números ⌈n/2⌉ [ #PraCegoVer : teto de n sobre 2]
restantes. Naturalmente, se n = 1 [ #PraCegoVer : n igual a 1], basta simplesmente
retornar a [ #PraCegoVer : a índice 0] como resposta. Assim que cada uma das duas
0
somas for calculada aplicando o mesmo método recursivamente, os seus valores podem
ser somados para obter o resultado em questão (LEVITIN, 2012):
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 2/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
em que f(n) é uma função que contabiliza o tempo gasto na divisão de uma instância de
tamanho n em instâncias de tamanho n/b e combinando suas soluções. Considerando
essa recorrência no formato padrão de recorrências, temos que T(n) é, no máximo, uma
constante para todo n suficientemente pequeno. Para valores grandes de n , o caso geral
seria dado por
Em que:
O caso básico de uma recorrência no formato padrão afirma que quando o tamanho da
entrada é suficiente, nenhuma chamada recursiva é necessária; logo, o problema pode
ser resolvido em tempo O (1). Por outro lado, o caso geral assume que o algoritmo faz a
chamadas recursivas, cada uma aplicada a um subproblema menor do que a entrada
d
original e cuja redução se dá por um b. Além disso, o caso geral realiza O(n ) [
#PraCegoVer : O de n elevado a d] operações funciona fora das chamadas recursivas
(ROUGHGARDEN, 2017).
Uma técnica muito empregada para se encontrar uma solução fechada para recorrências
no formato padrão é conhecido como teorema mestre. De acordo com Cormen et al.
(2009), o teorema mestre oferece um passo a passo para resolver recorrências da forma
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 3/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
(Caso 1) Se
para alguma constante ε > 0 [ #PraCegoVer : épsilon maior que 0], então
(Caso 2) Se
então
(Caso 3) Se
Teorema Mestre
d
Se f(n) ∈ Θ(n ) [ #PraCegoVer : f de n pertence a theta de n elevado a d] onde d ≥ 0 na
recorrência T(n) = aT(n/b) + f(n) [ #PraCegoVer : T de n igual ao produto de a com T de n
sobre b e isso somado a f de n] então
Para que o teorema possa ser aplicado, é preciso que a diferença entre essas duas
ε
funções seja polinomial, isto é, tem que ser pelo menos n [ #PraCegoVer : n elevado a
épsilon] . Em função disso, o teorema não se aplica a todas as recorrências. De maneira
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 4/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
VOCÊ SABIA?
Os três casos abrangidos pelo teorema mestre não cobrem todas as
possibilidades para f(n) . Há uma lacuna entre os casos 1 e 2 quando f(n) é
menor que
mas não polinomialmente menor. Da mesma forma, existe uma lacuna entre os
casos 2 e 3 quando f(n) é maior que
mas não polinomialmente maior. Se a função f(n) cair em uma dessas lacunas, ou
se a condição de regularidade no caso 3 falhar, não será possível usar o método
mestre para resolver a recorrência (SKIENKA, 2008).
Para utilizar o teorema mestre, basta determinar em qual caso (se aplicável) a
recorrência a ser resolvida se encaixa. Por exemplo, a seguinte função: T(n) = 9T(n/3) +
n [ #PraCegoVer : T de n é igual a 9 vezes T de n sobre 3 e isso somado a n]. Para essa
recorrência, os termos considerados pelo teorema têm os seguintes valores:
a = 9; [ #PraCegoVer : a igual a 9]
b = 3; [ #PraCegoVer : b igual a 3]
f(n) = n . [ #PraCegoVer : f de n igual a n]
Logo,
Como
onde ε = 1 [ #PraCegoVer : épsilon é igual a 1], o teorema pode ser aplicado para o caso
2
1, o que leva à solução da recorrência como T(n) = Θ(n ) [ #PraCegoVer : T de n é igual
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 5/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
a theta de n ao quadrado].
Um segundo exemplo de aplicação do teorema pode ser analisado com a função T(n) =
T(2n/3) + 1 [ #PraCegoVer : T de n é igual a T de 2n sobre 3 e isso somado a 1]. Neste
caso, os termos envolvidos são:
a = 1; [ #PraCegoVer : a igual a 1]
b = 2 /3; [ #PraCegoVer : b igual a dois terços]
Como
o caso 2 do teorema pode ser aplicado e o resultado é dado por T(n) = Θ(log(n)) [
#PraCegoVer : T de n é igual a theta de log de n]. Como terceiro exemplo, o problema de
encontrar a solução para a recorrência T(n) = 3T(n/4) + nlog(n) [ #PraCegoVer : T de n é
igual a 3 vezes T de n sobre 4 e esse produto é somado a n vezes log de n]. Neste caso,
tem-se:
a = 3, [ #PraCegoVer : a igual a 3]
b = 4, [ #PraCegoVer : b igual a 4]
Como
VOCÊ SABIA?
Merge sort é um algoritmo relativamente antigo e que era conhecido por John von
Neumann já em 1945. Apesar de ter mais de 70 anos, esse algoritmo ainda é um
dos métodos escolhidos para executar operações de ordenação. Na prática,
Merge sort é o algoritmo de ordenação padrão em uma série de bibliotecas de
programação (ROUGHGARDEN, 2017).
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 7/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
Uma maneira de visualizar a execução do algoritmo Merge sort é por meio de uma árvore
binária T, chamada de árvore Merge sort. Cada nó de T representa uma invocação
recursiva (ou chamada) do algoritmo sobre uma sequência S a ser ordenada. Os filhos
de um nó v de T estão associados às chamadas recursivas que processam as
subsequências S e S de S. Os nós externos de T estão associados a elementos
1 2
individuais de S, correspondendo a instâncias do algoritmo que não fazem chamadas
recursivas (GOODRICH, TAMASSIA e GOLWASSWER, 2014). O Diagrama 2 apresenta
um exemplo de árvore binária de execução do algoritmo Merge sort.
Algoritmo MergeSort
Entrada: Um vetor A[0 .. n - 1] de elementos ordenáveis
Saída: Vetor A[0 .. n – 1] ordenado de maneira crescente
1. se n > 1 então
6. Mesclar(B, C, A)
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 8/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
VOCÊ SABIA?
O número de comparações de chaves feitas pelo Merge sort, no pior caso, chega
muito perto do mínimo teórico (log n! ≈ nlog n – 1,44n) [ #PraCegoVer : logari
2 2
tmo de n fatorial na base 2 é aproximadamente igual a n log n na base 2 menos
1,44 n] que qualquer algoritmo de ordenação geral baseado em comparação
pode ter. Para n grande, a quantidade de comparações feitas por esse algoritmo,
no caso médio, acaba tendo cerca de 0,25n menos operações (LEVITIN, 2012).
No algoritmo para mesclagem de vetores utilizado pelo Merge sort, o vetor A resultado é
percorrido usando o índice k , e os subvetores com os índices i e j . Todos os três vetores
são percorridos da esquerda para a direita. O laço na linha 3 implementa a varredura
para construção do vetor de saída. Na primeira iteração, o procedimento identifica o
elemento mínimo em L ou R e realiza sua cópia para a primeira posição do vetor de
saída A. O elemento mínimo global está localizado ou em L (nesse caso é L[0], uma vez
que L está ordenado) ou em R (nesse caso é R[0], uma vez que R está ordenado).
Avançando o índice apropriado (i ou j), o algoritmo evita, definitivamente, de avaliar o
elemento recém-copiado em uma iteração posterior. Então, o processo é repetido para
identificar o menor elemento remanescente em L ou R (o segundo menor global). Em
geral, o menor elemento ainda não copiado para A é L[ i ] ou R[ j ]; o procedimento
verifica explicitamente qual é a menor e prossegue adequadamente. Uma vez que cada
iteração realiza a cópia do menor elemento ainda em avaliação em L ou R, o vetor de
saída é completamente preenchido de maneira ordenada.
Vantagem Desvantagem
Algoritmo Mesclar
Entrada: Vetores B e C, ambos ordenados e de tamanho ⌊n/2⌋
Saída: Vetor A[0 .. n - 1] ordenado composto dos elementos de L e R
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNLzf… 9/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
1. i ←0
2. j ←0
4. se L[ i ] < R[ j ] então
5. A[ k ] ← L[ i ]
6. i ← i + 1
7. senão
8. A[ k ] ← R[ j ]
9. j ← j + 1
Figura 1 – Operações executadas pelo procedimento de mesclagem do Merge sort. Fonte: CORMEN et al., 2009,
p. 32.
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 10/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
Aplicando o primeiro caso do teorema mestre para obtenção de uma solução fechada
para essa recorrência, temos que a complexidade do algoritmo é da ordem de Θ(nlog(n))
[ #PraCegoVer : theta de n log de n]. Importante observar que, como o processo de
particionamento do vetor em subvetores é baseado em posições e não em valores das
chaves, o algoritmo tem a mesma complexidade tanto no pior como no melhor caso.
VOCÊ O CONHECE?
Charles Antony Richard Hoare, aos 26 anos, inventou o algoritmo quick sort
enquanto tentava ordenar palavras para o projeto de uma máquina de tradução
do russo para o inglês. Ele fez a seguinte avaliação geral do seu trabalho (em
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 11/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
tradução livre): “Tive muita sorte. Que maneira maravilhosa de começar uma
carreira em computação, descobrindo um novo algoritmo de ordenação!”
(HOARE, 1996). Vinte anos depois, ele recebeu o Prêmio Turing por
“contribuições fundamentais para a definição e projeto de linguagens de
programação”. Em 1980, ele também foi nomeado cavaleiro por serviços à
educação e à Ciência da Computação (LEVITIN, 2012).
O quick sort, assim como o Merge sort, aplica uma estratégia de divisão e conquista. As
três etapas dessa estratégia implementadas pelo algoritmo para a ordenação de uma
sequência S de elementos são:
1. Divisão. Se S tem pelo menos dois elementos (nada precisa ser feito se S tem zero
ou um elemento), selecionar um elemento x específico de S, o qual será chamado
de pivô. Remova todos os elementos de S e os coloque em três outras sequências:
Figura 3 – Visão esquemática do algoritmo quick sort. Fonte: GOODRICH; TAMASSIA; GOLWASSWER, 2014, p.
544. (Adaptado).
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 12/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
esquerda com chaves menores ou iguais ao pivô, e uma parte direita com chaves
maiores ou iguais ao pivô. Naturalmente, depois que uma partição s é obtida, A[ s ]
estará em sua posição final no vetor ordenado e, dessa forma, o processo de ordenação
pode prosseguir para os dois subvetores à esquerda e à direita de A[ s ]
independentemente.
Algoritmo Partição
Entrada: Subvetor de um vetor A[ 0 .. n – 1] definido pelos seus índices esq esquerdo e
dir direito com esq < dir .
Saída: Partição de A[ esq .. dir ] com a posição de pivô retornada pelo procedimento
1. i ← esq
2. j ← dir
3. pivo ← (i + j) / 2
7. se i ≤ j então
8. Trocar A[ i ] e A[ j ] de posições
9. i ← i + 1
10. j ← j - 1
Estabilidade
Aplicando o caso 2 do teorema mestre, temos que uma solução fechada para a
recorrência pode ser expressa como T(n) = Θ(nlog (n)) [ #PraCegoVer : T de n é igual a
2
theta de n log de n]. Portanto, ao equilibrar igualmente os dois lados da partição em cada
nível da recursão, obtemos um algoritmo assintoticamente mais rápido.
ELEMENTOS:
PASSO 1
Se n = 0 ou n = 1, então o L está ordenado.
PASSO 2
PASSO 3
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 15/20
PASSOelemento3(pivô) x em L.
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
Escolha qualquer
PASSO 4
L recebe a concatenação de S , seguido de x, seguido de S .
1 2
VOCÊ SABIA?
Uma característica relevante do quick sort é a sua ineficiência quando executado
sobre arquivos já ordenados e quando a escolha do pivô é inadequada. Por
exemplo, a escolha sistemática dos extremos de um arquivo já ordenado leva ao
2
seu pior caso e o número de comparações passa a cerca de n /2 [
#PraCegoVer : n ao quadrado sobre 2]. Além disso, o tamanho da pilha auxiliar
necessária para as chamadas recursivas é cerca de n (ZIVIANI, 1999).
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 16/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
A soma dos custos incorridos em cada nível da recursão será expressa pelo mesmo
somatório já descrito previamente nessa seção, ou seja, a complexidade do pior caso do
2
quick sort será da ordem Θ(n ) [ #PraCegoVer : theta de n ao quadrado].
Síntese
Neste capítulo, tivemos a oportunidade de ampliar ainda mais o nosso conhecimento a
respeito de recorrências. Embora existam outros métodos muito utilizados para a
obtenção de soluções fechadas para funções desse tipo, o detalhamento do teorema
mestre ofereceu uma nova ferramenta para a manipulação de recorrências. Os três
casos contemplados por ele foram caracterizados dentro de exemplos práticos, o que
possibilitou uma visão mais clara de como as condições requeridas para sua aplicação
devem ser analisadas.
chaves dentro da memória principal. Além disso, como o funcionamento de cada um foi
bem explorado através de pseudocódigos, conseguimos formar um conhecimento para
subsidiar a identificação dos cenários que sejam mais adequados para o empregado de
cada um dos algoritmos.
SAIBA MAIS
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 18/20
27/02/2023, 16:57 Unidade 3 - 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… 19/20
27/02/2023, 16:57 Unidade 3 - Análise de algoritmos
https://student.ulife.com.br/ContentPlayer/Index?lc=IyP2HINt7kgtyq4uw8F3sw%3d%3d&l=I7aJAzLzUh2p9R%2fLCcea3w%3d%3d&cd=bezNL… 20/20