Ejemplo n.º 1
0
        public double GraphAssortativity2()
        {
            cacheIsEmpty = false;
            if (!Double.IsNegativeInfinity(_graphAssortativity2))
            {
                return(_graphAssortativity2);
            }

            if (ExcessDegreeVariance == 0) // All vertices are the same degree, automatically perfect assortativity
            {
                return(_graphAssortativity2 = 1.0);
            }

            double M         = Edges.Count();
            double numerator = ((1 / M) * (EdgesAsNodes.Sum(e => e.Item1.Degree * e.Item2.Degree)) -
                                Math.Pow((1 / M) * 0.5 * EdgesAsNodes.Sum(e => e.Item1.Degree + e.Item2.Degree), 2.0));
            double denominator = ((1 / M) * 0.5 *
                                  EdgesAsNodes.Sum(e => Math.Pow(e.Item1.Degree, 2) + Math.Pow(e.Item2.Degree, 2)) -
                                  Math.Pow((1 / M) * 0.5 * EdgesAsNodes.Sum(e => e.Item1.Degree + e.Item2.Degree), 2.0));

            return(_graphAssortativity2 = numerator / denominator);
        }