rai3mb
(usa Outra)
Enviado em 09/07/2011 - 16:21h
No caso do problema do nosso amigo acredito que usam algoritmo de busca bem aprimorado, como o método de pesquisa binária, peguei um livro da universidade com código em Pascal e adaptei para o shell, vejam um exemplo:
--------------------------
#!/bin/bash
BUSCA=$1
#Elementos
VALORES=(1 3 5 7 9 10 11 12 13 14 15 18 19 32 45 67 71 72 73 75 76 79 80 82 85 199 345 500 545 651 678 745 867 987 988 989 999)
INICIO=1
FINAL=$(echo "${#VALORES[@]}")
FINAL=$(($FINAL-1))
i=0
while [ $INICIO -le $FINAL ]
do
MEIO=$((($INICIO+$FINAL)/2))
if [ ${VALORES[$MEIO]} -eq $BUSCA ]; then
echo 'achou'
break;
elif [ $BUSCA -gt ${VALORES[$MEIO]} ];then
INICIO=$(($MEIO+1))
else
FINAL=$(($MEIO-1))
fi
i=$(($i+1))
done
echo "Quantidade de Elementos: ${#VALORES[@]}"
echo "Elemento que buscamos: $BUSCA"
echo "Quantidade de iterações: $i"
---------------------------------------------
Obs.: Os elementos devem está ordenados.
Agora vem um exemplo de resultado:
./buscaBinaria.sh 67
achou
Quantidade de Elementos: 37
Elemento que buscamos: 67
Quantidade de iterações: 3
Vejam que precisou de apenas 3 iterações, sendo que temos 37 elementos para buscar, então podemos imaginar que mesmo se tivermos milhões de registros, a busca será reduzida drasticamente, usando um método como esse.
Abraços