DCC003: Algoritmos e Estruturas de Dados I
2013/1
Exercícios 8: Picos em Matrizes
Exercício 1. Considere o algoritmo a seguir para
encontrar um pico numa matriz M de L linhas e C colunas.
- Se L for 1 e se C for 1, retorne o único elemento como
pico. Caso contrário continue no passo 2.
- Seja i = L/2 e j = C/2 (os números da linha e da coluna no
meio da matriz). Note que a linha e a coluna no meio da matriz
formam uma cruz e dividem a matriz original em quatro
sub-matrizes com um quarto do tamanho original.
- Encontre o máximo global entre os elementos da linha i e da
coluna j (o elemento máximo na cruz).
- Se o máximo global encontrado no passo 3 for um pico na
matriz original, retorne-o como pico. Caso contrário execute o
passo 5.
- Se o máximo global encontrado no passo 3 não for um pico na
matriz original, então ele tem um vizinho maior que ele. Chame
o algoritmo recursivamente na sub-matriz com o elemento maior
que o máximo encontrado no passo 3. Note que o algoritmo
recursivo irá operar apenas em um quarto da matriz original.
O algorítmo acima não funciona. (a) Explique qual o problema com o
algoritmo acima e mostre um exemplo de matriz para o qual ele retorna a
resposta errada (isto é, uma matriz onde o elemento retornado não é um
pico). (b) Implemente uma versão correta do algoritmo e teste-o na
matriz que você mostrou na letra (a).