POSCOMP 2019: Questão 21 Resolvida (Complexidade de algoritmos)

Por
| 

Logotipo do POSCOMP 2019

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(nlog43log43)=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 ϵ=2log230,41, obtém-se

f(n)=Ω(nlogba+ϵ)=Ω(nlog23+(2log23))=Ω(nlog23+2log23)=Ω(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)2cn23n2/4cn23/4c

A desigualdade anterior é satisfeita para qualquer c3/4, consequentemente todo c tal que 3/4c<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.

Sugestões de livros para estudantes de computação na Amazon (patrocinado): Lista de Livros

Obrigado pela leitura! Se você puder, considere apoiar financeiramente o Blog Cyberini, Chave Pix: cyberpix9@gmail.com

Doar com PayPal

Siga o blog

Redes sociais: Facebook, Twitter, YouTube, Pinterest, Instagram, Telegram

Importante: utilize o bom senso na hora de comentar. Acesse a política de privacidade para maiores informações sobre comentários.

Nenhum comentário:

Postar um comentário

Este site usa cookies para fornecer serviços, analisar o tráfego e exibir publicidade personalizada, conforme a nossa política de privacidade. Seus dados, como IP e user agent, são compartilhados com nossos parceiros (como o Google). Saiba Mais

RecusarAceitar