Пример #1
0
        public decimal Calcule(CalculData data)
        {
            /* Calcule la distance maximale entre deux vecteurs. */
            var copy        = data.Vecteurs.ToList();
            var distanceMax = data.Vecteurs.Max(a => copy.Max(b => _distance.Calcule(a, b)));

            /* Nombre de transition de chansons. */
            int nbTransitions = data.Vecteurs.Count - 1;

            decimal buffer          = 0;
            var     vecteursOrdonne = data.Vecteurs.OrderBy(v => v.Ordre).ToList();

            /* Parcourt les vecteurs ordonnés du 1er à l'avant dernier. */
            for (int rowIdx = 0; rowIdx < nbTransitions; rowIdx++)
            {
                /* Somme les distances avec le suivant. */
                var vecteurN  = vecteursOrdonne[rowIdx];
                var vecteurN1 = vecteursOrdonne[rowIdx + 1];
                buffer += _distance.Calcule(vecteurN, vecteurN1);
            }

            /* Normalise la somme des distance */
            buffer = buffer / (nbTransitions * distanceMax);

            return(buffer);
        }
        public void CalculeMatriceSimilarite(CalculData data)
        {
            var dim  = data.Vecteurs.Count;
            var axeX = data.Vecteurs.ToList();
            var axeY = data.Vecteurs.ToList();
            var matriceSimilarite = new MatriceSimilarite();

            for (int x = 1; x <= dim; x++)
            {
                for (int y = 1; y <= dim; y++)
                {
                    var vectX = axeX[x - 1];
                    var vectY = axeY[y - 1];
                    matriceSimilarite[vectX, vectY] = _distance.Calcule(vectX, vectY);
                }
            }

            data.MatriceSimilarite = matriceSimilarite;
        }