Galera tenho um pequeno programa para fazer usando busca binaria, a ideia é assim, tenho que fazer o computador axar uma pessoa escondido em 100 arvore, eu vou informar a arvore em que a pessoa esta escondida, ai tenho que fazer uma busca para o computador achar a pessoa escondida, sendo que o computador ira informar um numero e o usuario ira informar se esta em um numero maior ou menor, ai o computador tem que achar onde a pessoa ta usando busca binaria. e tipo aquele esquema tenho um vetor de 100 posicoes ai digo o numero 30, ai ele perg ta maior ou menor que 50 ai digo menor ai ele pergunta novamente maior ou menor que 25 ai maior ate ele achar a arvore 30.
Tentei implementar em um codigo de busca mais não deu muito certo não erros apareceram que só ai to postando pois acho que muita gente ja fez um exemplo desses.
Quem souber dar uma ajuda no codigo, porque falando e facil o dificil e pensar no codigo,
valeuu Galeraa
Busca Binaria
12 Respostas
Duvidas ??? :roll: :roll: :roll:
Faça um método recursivo que divide seu vetor em dois até encontrar o valor…
Então cara posta teu codigo com os erros, porque ai fica mais facil pra galera ajudar!!!
Bom cara não sei se é isso, mas o que tenho de busca binária é isso.. Você informa a chabe e ele vai quebrando até achar..Se não for isso foi mau..hheaea
IRM = indice
FRM = tamanho máximo
chave = valor procurado
public void bb( int IRM, int FRM,int chave){
int meio = (IRM+FRM)/2;
if(IRM!=FRM)
{
if(copia[meio]==chave)
JOptionPane.showMessageDialog(null,"A Chave se encontra no indice"+ "["+meio+"]"+"="+copia[meio],"Busca Bináia",JOptionPane.INFORMATION_MESSAGE);
else
{
if(chave>copia[meio])
{
IRM=meio+1;
bb(IRM,FRM,chave);
}
else
{
FRM=meio-1;
bb(IRM,FRM,chave);
}
}
}
else
{
if(copia[meio]==chave)
JOptionPane.showMessageDialog(null,"A Chave se encontra no indice"+ "["+meio+"]"+"="+copia[meio],"Busca Binária",JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(null,"Chave inexistente","Busca Binária",JOptionPane.INFORMATION_MESSAGE);
}
}
cara era isso mesmo que eu queria fazer, mas qnd compilei teu codigo ta dando um erro na variavel copia, e como faço pra deixar o vetor ja com as 100 posicoes que quero
valeuu pela ajuda
public class Numero3 {
public static void main (String args[]){
int chave = 15;
}
public void bb( int indice, int tamanho,int chave){
int meio = (indice+tamanho)/2;
if(indice!=tamanho)
{
if(copia[meio]==chave)
System.out.print("O Marciano se encontra na Arvore"+ "["+ meio +"]"+ "=" + copia[meio]);
else
{
if(chave>copia[meio])
{
indice=meio+1;
bb(indice, tamanho, chave);
}
else
{
tamanho=meio-1;
bb(indice, tamanho, chave);
}
}
}
else
{
if(copia[meio]==chave)
System.out.print("O Marciano se encontra na Arvore"+ "["+ meio +"]" + "=" + copia[meio]);
else
System.out.print("Marciano Inexistente");
}
}
}
BOm no caso essa variavel COPIA é o meu “vetor”, pego os dados desse vetor ordeno E dai faço a Busca Binária…
P/ rodar faça uma main que peça p/ o usuário entrar com os numeros e depois ordeneos e chame essa função…
Qualquer coisa psota ae
Cara fiz o que tu falou mas não roda, ve o main ta como se a chave fosse 15 que o usuario que buscar, ai copia tu falou que e o vetor ai declarei com as 100 posiçoes que queria mas não roda nada!
public class Numero3 {
public static void main (String args[]){
int chave = 15;
}
public void bb( int indice, int tamanho,int chave){
int copia[] = new int [100];
int meio = (indice+tamanho)/2;
if(indice!=tamanho)
{
if(copia[meio]==chave)
System.out.print("O Marciano se encontra na Arvore"+ "["+ meio +"]"+ "=" + copia[meio]);
else
{
if(chave>copia[meio])
{
indice=meio+1;
bb(indice, tamanho, chave);
}
else
{
tamanho=meio-1;
bb(indice, tamanho, chave);
}
}
}
else
{
if(copia[meio]==chave)
System.out.print("O Marciano se encontra na Arvore"+ "["+ meio +"]" + "=" + copia[meio]);
else
System.out.print("Marciano Inexistente");
}
}
}
pessoal tentei denovo aki saiu os erros do codigo mas qnd roda ai surge o problema ta o codigo modificado, me ajudem
package Projeto;
public class Numero3 {
public static void main (String args[]){
System.out.println("A chave que buscou foi de" + bb(0,100,15));
}
public static int bb( int indice, int tamanho,int chave){
int copia[] = new int [99];
int meio = (indice+tamanho)/2;
if(indice!=tamanho)
{
if(copia[meio]==chave)
System.out.print("O Marciano se encontra na Arvore"+ "["+ meio +"]"+ "=" + copia[meio]);
else
{
if(chave>copia[meio])
{
indice=meio+1;
bb(indice, tamanho, chave);
}
else
{
tamanho=meio-1;
bb(indice, tamanho, chave);
}
}
}
else
{
if(copia[meio]==chave)
System.out.print("O Marciano se encontra na Arvore"+ "["+ meio +"]" + "=" + copia[meio]);
else
System.out.print("Marciano Inexistente");
}
return 1;
}
}
Mas com esse novo código o q q esta acontecendo?
Bom dei uma olhada e tipo copia[] vc tem q decalrar fora, não na função BB…Pq tipo esse vetor ele contem todos os numeros que foram digitados ou que irao ser digitados, do keito que ta qnd chama a função BB ele cria um novo vetor que não tem nd nele…
Não sei como q vc esta fazendo + tipo, eu auqi por exemplo quero 30 numeros…fiz uma função p/ pedir que o usuário entre com os 30 numeros, em seguida ordenei esse vetor dai sim chamo a funão BB q no caso a variavel COPIA é referente a esse vetor que o usuário armazenou os dados…Não sei se ficou meio confuso…heaheea
Qualquer coisa posta ae
Ah intaum acho que não é isso que quero esse codigo que tu mandou e o que? tu pode mandar ele todo com o main?
porque eu queria fazer isso:
O computador fará uso de uma busca binária para descobrir onde você escondeu o marciano.
a. Você poderá esconder o marciano em uma das 100 árvores da floresta que estão enumeradas de 0 a 99. Você deverá entrar com um valor nessa faixa.
b. O computador usará uma busca binária para descobrir onde você escondeu o marciano.
c. O computador exibirá um número onde o marciano se esconde; Você deverá informar se a escolha foi certa ou está em uma árvore maior ou menor (número da árvore).
d. O computador irá informar novo número de acordo com a sua resposta (usando busca binária), até encontrar!
Tipo eu usei ela p/ isso:
a. a pessoa entra com uma massa de dados (no maximo 30) exemplo
2,5,98,87, e assim vai
b. com essa massa de dados vc pega e ordena. 2,5,87,98
c. em seguida a pessoa digita um numero.EX =5
d. com a BB ele informa se o numero escolhido esta no vetor ou ñ e se estiver fala a posição.Ex= numero 5 se encontra no posição 1.