Pesquisa Binária usando Bash-Shell
Publicado por Raimundo Alves Portela (última atualização em 20/07/2011)
[ Hits: 7.946 ]
Homepage: http://portelanet.com
Durante o tópico http://www.vivaolinux.com.br/topico/Off-Code-Cafe/Como-isso-e-possivel, acabei me relembrando de algumas aulas na Faculdade, onde aprendemos alguns métodos de pesquisa, que facilitam/agilizam a busca de informações, e eis que apresento a Pesquisa Binária.
"...A pesquisa ou busca binária (em inglês binary search algorithm ou binary chop) é um algoritmo de busca em vetores que requer acesso aleatório aos elementos do mesmo. Ela parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca (divisão e conquista) comparando o elemento buscado (chave) com o elemento no meio do vetor. .."
Fonte: http://pt.wikipedia.org/wiki/Pesquisa_bin%C3%A1ria
Ok, basicamente meu script precisa de dois parâmetro, o primeiro é o valor a ser buscando, o segundo é um arquivo que contenha na primeira coluna, os valores da busca.
Exemplo de arquivo:
008912;RAIMUNDO
003145;PEDRO
001234;JOAO
001235;PAULO
003456;MARCIO
001315;BIANCA
000123;MARCELA
005670;BRUNO
009870;CAIO
098765;JUNIOR
100000;AMANDA
123456;PERCIVAL
111111;ASDADA
222111;ASDAS
#!/bin/bash
# Aplicando Método de Pesquisa Binária
# Por Raimundo A. Portela <rai3mb@gmail.com>
# Verifica os parâmetros
[ -z "$1" ] || [ -z "$2" ] && echo 'Sintaxe ./buscaBinaria.sh [valor_numerico] [arquivo]' && exit
# Verifica se o segundo parâmetro é um arquivo
! [ -f "$2" ] && echo 'Arquivo inexistente' && exit
BUSCA=$1
ARQUIVO=$2
#Captura elementos
IDS=( ${array[@]} `cat "$ARQUIVO" | egrep '[^(^$)]' | cut -d';' -f 1 | sort`)
INICIO=1
FINAL=$(echo "${#IDS[@]}")
FINAL=$(($FINAL-1))
i=1
RESULTADO="O valor [$BUSCA] não foi encontrado no arquivo $ARQUIVO"
while [ $INICIO -le $FINAL ]
do
MEIO=$((($INICIO+$FINAL)/2))
if [ ${IDS[$MEIO]} -eq $BUSCA ]; then
RESULTADO="O valor [$BUSCA] está no arquivo $ARQUIVO"
break;
elif [ $BUSCA -gt ${IDS[$MEIO]} ];then
INICIO=$(($MEIO+1))
else
FINAL=$(($MEIO-1))
fi
i=$(($i+1))
done
echo "$RESULTADO"
echo
echo "Quantidade de Elementos na Busca: ${#IDS[@]}"
echo "Elemento que Buscamos: $BUSCA"
echo "Quantidade de Iterações: $i"
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO USUÁRIOS A PARTIR DE ARQUIVO
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - APAGANDO MSG ANTIGAS DA MBOX - TODOS OS USUARIOS
Imspector - Manipular ACLS facilmente
cal2svg gerador de calendários em formato vetorial SVG
Dialog - Menu semi-gráfico para adicionar, excluir, alterar usuários no Samba
Nenhum comentário foi encontrado.
SynapSeq - programa para estimular as ondas cerebrais
Por que seu __DIR__ falhou ou o "inferno" dos caminhos no PHP
Preparando-se para certificações da LPI através do LPI Lab
Migração de Arch Linux para repositórios CachyOS (Uso de Instruções v3 e v4)
Arch Linux com repos do CachyOS para otimização ou usar Gentoo?
Ativando o modo Quake no XFCE4-Terminal
[Tutorial] Configurando Multimaster no Samba 4 AD (DC02) + Explicação de FSMO Roles
[Resolvido] Google Chrome reclamando de perfil em uso após mudar hostname
Como instalar Warsaw no Gentoo? (6)
Senhor Einstein tinha razão mesmo! [RESOLVIDO] (12)
Como insiro e excluo um elemento XML e JSON ao código Javascript (2)
Da pra formatar um netbook MGB e usar algum linux nele? É possível usa... (4)









