private void ComputeAllDeviations()
        {
            foreach (var articleA in _articles)
            {
                foreach (var articleB in _articles)
                {
                    if (articleA == articleB)
                    {
                        _deviations[articleA, articleB] = new Deviation(0, 0);
                        _deviations[articleB, articleA] = new Deviation(0, 0);
                        break;
                    }

                    var deviation = ComputeDeviation(articleA, articleB);
                    _deviations[articleA, articleB] = deviation;
                    _deviations[articleB, articleA] = new Deviation(-deviation.Value, deviation.Cardinality);
                }
            }
        }
        private Deviation ComputeDeviation(int articleA, int articleB)
        {
            var deviation = new Deviation(0, 0);

            var usersRatedA = _ratedBy[articleA];
            var usersRatedB = _ratedBy[articleB];

            foreach (var user in usersRatedA)
            {
                if (!usersRatedB.Contains(user))
                {
                    continue;
                }

                deviation.Update(_ratings[user, articleA] - _ratings[user, articleB]);
            }

            return(deviation);
        }