Considere uma matriz M[R][C] de registros armazenada em memória no formato row-major. Em um algoritmo que…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Elaborar algoritmos que envolvam instruções sequenciais, de repetição e de seleção usando uma linguagem de programação.
Fonte: Base Nacional Comum Curricular (MEC).Questão
Considere uma matriz M[R][C] de registros armazenada em memória no formato row-major. Em um algoritmo que percorre M com laços aninhados, qual ordem de iteração (linha externa, coluna interna OU coluna externa, linha interna) oferece melhor localidade de dados e por quê?
- A) Utilizar um laço único que percorre todos os elementos.
- B) Iterar aleatoriamente por linhas e colunas.
- C) Laço externo sobre linhas e laço interno sobre colunas (iterar por linha, depois por coluna) para aproveitar a localidade em row-major.
- D) Devemos percorrer a matriz na ordem inversa (C[0][0] -> C[R-1][C-1]).
- E) Laço interno sobre linhas e externo sobre colunas.
✅ Resposta correta: alternativa C
Resolução passo a passo
- Em row-major, os elementos de uma mesma linha ficam em posições consecutivas da memória. Assim, a matriz M[R][C] é guardada como M[0][0], M[0][1], ..., M[0][C-1], depois M[1][0], e assim por diante.
- Para aproveitar a localidade espacial (o cache carrega blocos contíguos de memória), o acesso sucessivo deve seguir essa mesma ordem. Isso significa que o laço externo percorre as linhas e o laço interno percorre as colunas, como descrito na alternativa C.
- Com essa ordem, cada bloco trazido para o cache é totalmente usado antes de ser substituído, reduzindo falhas de cache (cache misses).
- A alternativa A está errada, pois um laço único não define a ordem de acesso às posições de uma matriz bidimensional e não resolve o problema de localidade por si só; além disso, a questão pergunta sobre laços aninhados.
- A alternativa B está errada, pois acessos aleatórios destroem a localidade espacial, em vez de melhorá-la.
- A alternativa D está errada, pois a ordem inversa ainda percorre a matriz de forma contígua apenas no sentido decrescente; a questão compara linha externa com coluna interna, e a ordem inversa não é a resposta pedida pelo enunciado.
- A alternativa E está errada, pois colocar as linhas no laço interno faz o acesso saltar de C em C posições na memória, o que piora a localidade.
- Conclusão: a resposta correta é a C, que coincide com o gabarito oficial.
💡 Dica: Considere a estrutura de armazenamento da matriz ao responder.
Alternativa por alternativa
O aluno acredita que um único laço simplifica o acesso e garante melhor desempenho, sem perceber que a questão trata da ordem de acesso em laços aninhados sobre a estrutura bidimensional.
O aluno supõe que variar aleatoriamente os índices distribui melhor os acessos, sem saber que a localidade depende de acessos sequenciais na memória.
Por que engana: O aluno pode confundir a ordem de iteração, escolhendo a que não aproveita a localidade de dados, como a opção de percorrer aleatoriamente.
Em row-major elementos consecutivos da mesma linha são contíguos na memória; variar a coluna no laço interno acessa posições adjacentes, reduzindo faltas de cache.
O aluno confunde a ordem de percurso com a questão da localidade, imaginando que inverter o sentido muda o padrão de acesso à memória, quando o que importa é a contiguidade dentro de cada linha.
O aluno inverte a relação entre laços e índices, achando que varrer colunas no laço externo e linhas no interno favorece o row-major, quando na verdade faz o acesso pular grandes saltos na memória.
Raio-X da questão
localidade de dados
diagnostico
matrizes em programação · row-major e column-major
Revisar conceitos de localidade de dados em matrizes.
O aluno pode confundir a ordem de iteração, escolhendo a que não aproveita a localidade de dados, como a opção de percorrer aleatoriamente.
ciencia_tecnologia
pensamento_critico
cientifico
Questões parecidas com resolução
- Ao implementar um algoritmo que percorre uma matriz de registros 'dados' armazenada em memória row-major, qual ordem de…
- Dada uma matriz de registros M com R linhas e C colunas (indexação base 0), qual fórmula calcula o índice linear do…
- Como uma estrutura de dados como uma matriz pode otimizar um programa?
- Um algoritmo aninhado percorre uma matriz M de tamanho n×n com dois loops: para i de 1 até n e para j de 1 até n. Se a…
- Projete um algoritmo em pseudocódigo que, dada uma matriz M com m linhas e n colunas de inteiros, determine quantos…
- Em um algoritmo que percorre uma matriz de registros 'matrizDados' usando variáveis índice i e j para acessar elementos…
🔎 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
