
Questão
Considere os seguintes algoritmos recursivos que resolvem o mesmo problema em uma entrada de tamanho n:
- Algoritmo 1: Divide o problema em 3 partes de tamanho n/4 cada e gasta um tempo adicional O(1) por chamada.
- Algoritmo 2: Divide o problema em 3 partes de tamanho n/2 cada e gasta um tempo adicional O(n2) por chamada.
- Algoritmo 3: Divide o problema em 3 partes de tamanho n/3 cada e gasta um tempo adicional de O(n) por chamada.
A complexidade dos algoritmos 1, 2 e 3 é, respectivamente:
- (A) Θ(nlog43),Θ(n2),Θ(nlogn)
- (B) Θ(n4),Θ(n2),Θ(n3)
- (C) Θ(1),Θ(n2),Θ(n)
- (D) Θ(n4),Θ(n2),Θ(n3)
- (E) Θ(nlog43),Θ(nlog23),Θ(nlog33)
Resolução
Esta questão será resolvida por etapas.
Complexidade do primeiro algoritmo
Seja T1(n) o tempo de execução do primeiro algoritmo para uma entrada de tamanho n. A chamada recursiva T1(n) terá como custo 3T1(n/4), o que significa que o problema foi dividido em 3 partes de tamanho n/4, além do custo O(1) da chamada.
A equação de recorrência para esse caso será
T1(n)=3T1(n/4)+O(1).
A recorrência anterior pode ser resolvida por meio do teorema mestre ou pelo método de Akra-Bazzi. Utilizaremos o primeiro.
a=3,b=4,f(n)=1
Essa recorrência se enquadra no primeiro caso do teorema mestre, considerando, dentre inúmeras possibilidades, ϵ=log43
f(n)=O(nlogba−ϵ)=O(nlog43−ϵ)=O(nlog43−log43)=O(n0)=O(1)
Ou seja, T1=Θ(logba)=Θ(log43).
Complexidade do segundo algoritmo
Para o segundo algoritmo, denota-se o tempo de execução como T2(n). Nesse caso, o problema é dividido em 3 partes de tamanho n/2 e o custo é de 3T2(n/2) mais o custo adicional de O(n2).
A equação de recorrência, portanto, é
T2(n)=3T2(n/2)+O(n2)
Conforme o teorema mestre, para essa recorrência a=3, b=2 e f(n)=n2, o que faz com que T2(n) se enquadre no terceiro caso do teorema mestre, que será demonstrado a seguir.
Escolhendo convenientemente ϵ=2−log23≈0,41, obtém-se
f(n)=Ω(nlogba+ϵ)=Ω(nlog23+(2−log23))=Ω(nlog23+2−log23)=Ω(n2)
Como f(n)=n2=Ω(n2) é verdadeiro, então o limite assintótico anterior está correto.
Porém, ainda é necessário provar a condição de regularidade af(n/b)≤cf(n) para algum c<1 e n suficientemente grande.
af(n/b)≤cf(n)3f(n/2)≤cf(n)3(n/2)2≤cn23n2/4≤cn23/4≤c
A desigualdade anterior é satisfeita para qualquer c≥3/4, consequentemente todo c tal que 3/4≤c<1 satisfaz a condição de regularidade.
Isso demonstra que a recorrência T2(n) satisfaz o terceiro caso do teorema mestre e que, portanto,
T2(n)=Θ(f(n))=Θ(n2).
Complexidade do terceiro algoritmo
O tempo de execução do terceiro algoritmo será denotada por T3(n). Nesse algoritmo, o problema é dividido em 3 partes de tamanho n/3 cujo o custo é de 3T(n/3). O custo adicional por chamada é O(n).
A partir dessas informações, chega-se na seguinte equação de recorrência
T3(n)=3T3(n/3)+O(n).
A recorrência em questão se enquadra no segundo caso do teorema mestre, onde a=3, b=3 e f(n)=n.
A demonstração exige seja provado que f(n)=Θ(nlogba), que é verdade, uma vez que logba=log33=1 e, portanto, f(n)=Θ(n).
Ou seja, T3(n)=Θ(nlogbalogn)=Θ(nlogn).
Conclusão
Finalmente, concluímos que o primeiro algoritmo tem complexidade T1=Θ(log43), o segundo tem complexidade T2(n)=Θ(n2) e o terceiro tem complexidade T3(n)=Θ(nlogn).
Portanto, a alternativa correta é a A.
Mais questões
Se você deseja mais questões resolvidas do POSCOMP 2019, acesse a tag Questões do POSCOMP 2019.
Agora, se você procura questões, gabaritos e caderno de questões de outras edições, então acesse a página POSCOMP.
Resolverei as questões conforme o tempo permitir e de acordo com os meus conhecimentos. Como eu não sei resolver todas as questões, recomendo que você consulte também o gabarito oficial do exame.
Nenhum comentário:
Postar um comentário