Busca Binaria

12 respostas
G

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

12 Respostas

C

Duvidas ??? :roll: :roll: :roll:

J

Faça um método recursivo que divide seu vetor em dois até encontrar o valor…

J

Então cara posta teu codigo com os erros, porque ai fica mais facil pra galera ajudar!!!

G

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);
				
		}

	}
G

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

G
Oa mudei teu codigo so para ficar mais facil de entender, to com uma duvida essa variavel COPIA faz o que? e como faço um main para esse codigo??
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"); 
	             
	      } 

	   }
}
G

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

G

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"); 
	             
	      } 

	   }
}
G

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;
	   }
}
G

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

G

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!

G

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.

Criado 8 de novembro de 2006
Ultima resposta 12 de nov. de 2006
Respostas 12
Participantes 5