GeraProva GeraProva Provas com IA para professores do Brasil
Computação7º anoBNCC EF69CO04Difícil⏱ longo

Projete um algoritmo in-place, em pseudocódigo, que receba um vetor A de n números distintos e um inteiro k (1…

Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva

Habilidade BNCC EF69CO04

Construir soluções de problemas usando a técnica de decomposição e automatizar tais soluções usando uma linguagem de programação.

Fonte: Base Nacional Comum Curricular (MEC).

Questão

Projete um algoritmo in-place, em pseudocódigo, que receba um vetor A de n números distintos e um inteiro k (1 = k = n) e retorne o k-ésimo menor elemento usando a estratégia de partição (Quickselect). Explique passo a passo, com complexidade média e pior caso, e indique como escolher pivô para melhorar desempenho.

✍️ Questão dissertativa: veja abaixo a resposta esperada e a explicação.

Resposta esperada

Resposta modelo (pseudocódigo e justificativa): Função Quickselect(A, esquerda, direita, k): se esquerda == direita: retornar A[esquerda] escolher pivô_index entre [esquerda,direita] (por exemplo, aleatório ou mediana de três) pivô_index ? Partition(A, esquerda, direita, pivô_index) rank ? pivô_index - esquerda + 1 // posição do pivô na partição se k == rank: retornar A[pivô_index] senão se k < rank: retornar Quickselect(A, esquerda, pivô_index-1, k) senão: retornar Quickselect(A, pivô_index+1, direita, k-rank) Função Partition(A, l, r, p): trocar A[p] com A[r] storeIndex ? l para i de l até r-1: se A[i] < A[r]: trocar A[storeIndex] com A[i]; storeIndex ? storeIndex+1 trocar A[storeIndex] com A[r] retornar storeIndex Descrição e análise: - O algoritmo é in-place: a partição rearranja elementos dentro do próprio vetor sem estruturas auxiliares significativas. - Em cada chamada, Partition coloca o pivô em sua posição correta; elementos menores vão à esquerda e maiores à direita. - Dependendo do rank do pivô, o algoritmo recorre apenas a uma das subpartes, portanto o trabalho médio T(n)=T(n/2)+O(n) ? O(n) médio. - Pior caso (pivô sempre extremo) gera T(n)=T(n-1)+O(n) ? O(n^2). Para garantir pior caso linear, usar seleção de pivô pelo algoritmo mediana-de-medianas (determinístico), que escolhe um pivô aproximado à mediana em O(n), resultando em O(n) no pior caso. Observações práticas: - Escolha de pivô aleatório ou mediana de três reduz muito a probabilidade do pior caso em instâncias reais. - Quickselect é eficiente e usa pouca memória; para garantir robustez em entradas adversas, preferir mediana-de-medianas quando a garantia de tempo linear é necessária.

Explicação

O algoritmo Quickselect é eficiente na busca do k-ésimo menor elemento, utilizando a técnica de partição para reduzir o espaço de busca em cada iteração. A escolha do pivô, seja aleatória ou pela mediana de três, é crucial para evitar o pior caso e garantir desempenho médio linear. A abordagem in-place economiza memória, tornando o algoritmo prático para grandes conjuntos de dados.

Raio-X da questão

Dificuldade Difícil
Bloom Criar
Leitura alto
Discriminação alto
Peso pedagógico alto
Autonomia do enunciado completo
Cobertura da habilidade multipla
🧪 Simulado🩺 Diagnóstico🧮 Exige cálculo🏠 Cotidiano🔗 Interdisciplinar⭐ Representativa✍️ interpretativa🧩 desafio
🎯 Conceito central

algoritmo Quickselect

📌 Objetivo

avaliacao

🧱 Pré-requisitos

estratégia de partição · análise de algoritmos

📚 Reveja

Revisar algoritmos de seleção e partição.

⚠️ Erro mais comum

O aluno pode confundir a estratégia de partição do Quickselect com a do Quicksort, resultando em uma implementação incorreta do algoritmo.

🌎 Tema transversal

ciencia_tecnologia

🤝 Socioemocional

pensamento_critico

🏫 Contexto

abstrato

Questões parecidas com resolução

Todas as questões de Estratégias de solução de problemas - Decomposição

🔎 Procurar outra questão

Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.

Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog

Ocorreu um erro inesperado. Recarregar X

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.