internal static int[] pesquisaHashing(string chave, List <Candidato> candidatosOrdenados, TIPO tipo) { int[] result = { 0, 0 }; int size = candidatosOrdenados.Count; Dictionary <int, Candidato> candidatos = PopulateHashTable(candidatosOrdenados, size, tipo); long hash = OperacaoCandidato.valorChave(chave, candidatos.Count, tipo); Candidato resultado = (Candidato)candidatos[Convert.ToInt32(hash)]; result[0] = Convert.ToInt32(hash); return(result); }
private static Dictionary <int, Candidato> PopulateHashTable(List <Candidato> candidatosOrdenados, int size, TIPO tipo) { Dictionary <int, Candidato> candidatos = new Dictionary <int, Candidato>(); foreach (Candidato candidato in candidatosOrdenados) { int posicao = OperacaoCandidato.restoDaDivisao(candidato, size, tipo); try { candidatos.Add(posicao, candidato); } catch (Exception ex) { Console.WriteLine(ex.Message); // Tratar colisão! } } return(candidatos); }
private static int encontrarMeio(string chave, List <Candidato> candidatos, TIPO tipo, int menor, int maior) { return((int)(menor + (((double)(maior - menor) / (OperacaoCandidato.subtrair(candidatos[maior], candidatos[menor], tipo)) * (OperacaoCandidato.subtrair(new Candidato(chave), candidatos[menor], tipo)))))); }