Beispiel #1
0
        private string PreveClasse(Entrada entrada, Distancia distancia, Desempate desempate, Base baseDeTreinamento, int k)
        {
            var distancias = distancia.Calcular(entrada, baseDeTreinamento, k);
            var votos      = new Dictionary <string, int>();

            foreach (var voto in distancias)
            {
                if (votos.ContainsKey(voto.Classe))
                {
                    votos[voto.Classe] += 1;
                }
                else
                {
                    votos.Add(voto.Classe, 1);
                }
            }

            if (!MaisDeUmaClasseMaisProxima(votos))
            {
                return(votos.First().Key);
            }

            var votosOrdenados = votos.OrderByDescending(x => x.Value).ToList();

            if (!Empate(votosOrdenados))
            {
                return(votosOrdenados[0].Key);
            }

            return(desempate.Desempata(distancias, votos));
        }