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