예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 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))))));
 }