Ainda na área de Inteligência Artificial, duas operações comuns são as operações argmax e argmin, que retornam o índice do maior e menor elemento em um vetor, respectivamente.
Implemente a função argmax, que recebe um vetor de floats e retorna o índice do maior elemento no vetor.
Também implemente a função argmin, que recebe um vetor de floats e retorna o índice do menor elemento no vetor.
Por exemplo, para o vetor
.
Também implemente a função argmin, que recebe um vetor de floats e retorna o índice do menor elemento no vetor.
Por exemplo, para o vetor
Passo 1
O enunciado pede duas funções, argmax e argmin, que recebem um vetor de floats e retornam, respectivamente, o índice do maior e o do menor elemento. Para isso usamos varredura linear (linear scan): percorremos o vetor uma vez, mantendo o melhor valor encontrado até então e o seu índice.
Passo 2
Para implementar argmax, vamos:
- Assumir que o vetor não está vazio.
- Inicializar
\(maior_valor =\) vetor[\(0\)]
e\(indice_maior =0\)
. - Percorrer
i
de\(1\)
atélen(vetor)-\(1\)
. - A cada passo, se
vetor[i] > \(maior_valor\)
, atualizamos\(maior_valor =\) vetor[i]
e\(indice_maior =\) i
. - No final, retornamos
\(indice_maior\)
.
Passo 3
Para implementar argmin, o raciocínio é o mesmo, trocando a condição de comparação:
- Inicializar
e . - Percorrer
de até . - Se
, atualizamos e . - Retornamos
ao final.
Resposta
def argmax(vetor):
"""
Retorna o índice do maior elemento em um vetor não vazio de floats.
"""
\(maior_valor =\) vetor[\(0\)]
\[indice_maior =0\]
for i in range(\(1\), len(vetor)):
if vetor[i] > \(maior_valor\):
\(maior_valor =\) vetor[i]
\(indice_maior =\) i
return \(indice_maior\)
def argmin(vetor):
"""
Retorna o índice do menor elemento em um vetor não vazio de floats.
"""
\(menor_valor =\) vetor[\(0\)]
\[indice_menor =0\]
for i in range(\(1\), len(vetor)):
if vetor[i] < \(menor_valor\):
\(menor_valor =\) vetor[i]
\(indice_menor =\) i
return \(indice_menor\)