Considere um conjunto de 65.536 chaves ordenadas, distintas ...

Próximas questões
Com base no mesmo assunto
Q1846168 Algoritmos e Estrutura de Dados

Considere um conjunto de 65.536 chaves ordenadas, distintas entre si, armazenadas num array.


Com relação ao processo de busca binária, assinale a opção que indica o número máximo de acessos ao array necessários para localizar uma determinada chave qualquer. 

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: B

Vamos entender como chegamos a essa conclusão.

O tema central da questão é a busca binária, uma técnica de busca eficiente em um array ordenado. A busca binária funciona dividindo repetidamente o intervalo de busca pela metade, até que o elemento desejado seja encontrado ou que o intervalo de busca se torne vazio.

A busca binária tem uma complexidade de tempo de O(log2 n), onde n é o número de elementos no array. Isso significa que, em cada passo, a busca binária reduz pela metade o número de elementos restantes a serem considerados.

Para um array contendo 65.536 chaves, devemos calcular quantas vezes podemos dividir esse número por 2 até chegarmos a 1. Essa é a essência do logaritmo binário.

Vamos calcular log2 65.536:

log2 65.536 = 16

Portanto, o número máximo de acessos ao array para localizar uma chave usando busca binária é 16. Logo, a alternativa correta é B - 16.

Agora, vamos justificar por que as outras alternativas estão incorretas:

A - 10: Esse valor é muito baixo para a quantidade de elementos dada (65.536). Um valor de 10 corresponderia a log2 1024, que é muito menor do que 65.536.

C - 64: Esse valor é muito alto. Log2 64 é 6, e log2 65.536 é 16. Portanto, 64 acessos são desnecessários.

D - 256: Esse valor é também extremamente alto. 256 acessos implicariam em log2 2256, o que seria um número astronômico de chaves, muito além de 65.536.

E - 32.768: Esse valor é exageradamente alto. Log2 32.768 é aproximadamente 15, mas o valor 32.768 acessos não faz sentido dentro do contexto da busca binária e da quantidade de chaves fornecida.

Dessa forma, ao entender a relação entre a busca binária e a redução progressiva do intervalo de busca, fica claro que a alternativa correta é B - 16.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Uma Busca binária procura, por meio da divisão do Array por 2 (dois), até encontrar uma chave/valor qualquer, ou seja, 2 elevado a 16 é igual 65.536.

2^n = 65.536

n = 16

É uma interpretação minha, mas talvez ajude a entender a busca binária.

A principal característica dessa busca é que os elementos devem estar ordenados. Partindo desta premissa, a gente pode classificar esse método como "Dividir e Conquistar".

O que isso quer dizer? Vou dividir a minha lista em 2 partes e encontrar o meio dela. Pergunta: o elemento do meio é o número que estou procurando? Se sim, não há mais nada o que fazer. Achamos o elemento logo de cara e temos uma complexidade de O(1).

Se não for, aí precisamos perguntar: o elemento que estou procurando é menor ou maior que valor que achei relativo ao meio? Se for maior, a gente vai procurar o nosso elemento na parte da direita. Se for menor, a gente vai buscar o elemento na parte da esquerda.

Aí, percebam que essa característica de "Dividir e Conquistar" vai se repetir até você achar o número que quer. No pior dos casos O(log n), você vai dividir até chegar em 1 ou próximo disso e encontrar seu número desejado.

A fórmula seria algo do tipo:

médio = menor + (maior - menor) / 2

Sendo:

médio: o elemento do meio

menor: o menor elemento do universo em que está trabalhando

maior: o maior elemento do universo em que está trabalhando

Pegando o número que a questão deu como exemplo: 65.536

65.536 / 2 = 32.768 (1º tentativa)

Achamos o número? Não. Então continuamos

Só um adendo, aqui você já conseguiria eliminar a letra "E", pois ela é o melhor caso e questão quer o pior.

32.768 / 2 = 16.384 (2º tentativa)

16.384 / 2 = 8.192 (3º tentativa)

8.192 / 2 = 4.096 (4º tentativa)

4.096 / 2 = 2.048 (5º tentativa)

2.048 / 2 = 1.024 (6º tentativa)

1.024 / 2 = 512 (7º tentativa)

512 / 2 = 256 (8º tentativa)

256 / 2 = 128 (9º tentativa)

128 / 2 = 64 (10º tentativa)

64 / 2 = 32 (11º tentativa)

32 / 2 = 16 (12º tentativa)

16 / 2 = 8 (13º tentativa)

8 / 2 = 4 (14º tentativa)

4 / 2 = 2 (15º tentativa)

2 / 2 = 1 (16º tentativa)

Dessa forma, no pior dos casos O(log n), eu precisaria de 16 tentativas para achar o número. Logo, o GAB é LETRA "B".

Repito pessoal, essa forma leiga de entender essa questão. Ela pode conter erros.

A função matemática que descreve o comportamento da busca binária em árvores binárias (o número de vezes que reduzimos pela metade de forma repetida, começando em n, até conseguirmos o valor de 1) é: logarítmo de n na base 2.

Para o problema específico temos:

- logarítmo de 65.536 na base 2 (deve-se notar que a base 2 deve-se ao fato de ser uma busca binária)

Dado que as função logarítmicas são o inverso das funções exponenciais, então temos que:

- logarítmo de 65.536 na base 2 === 2^n = 65.536

Logo, podemos concluir que n = 16

2^10 = 1024

2^11 = 2048

2^12 = 4096

2^13 = 8k // ficou difícil, perder tempo pra quê moço !!!

2^14 = 16k

2^15 = 32k

2^16=64k => 65.536!!!

2^17=128k

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo