/// <summary>
        /// Calculate page rank for graph
        /// </summary>
        /// <param name="graph">Source graph</param>
        /// <param name="d">Damping factor</param>
        /// <returns>Calculated page rank</returns>
        public static PageRankResult CalculatePageRank(this IPageRankGraph graph, double d = 0.85)
        {
            var pageRank     = new Dictionary <uint, double>();
            var pageRankNext = new Dictionary <uint, double>();

            double initPr = 1.0 / graph.NodesCount;

            // 1
            foreach (var node in graph)
            {
                pageRankNext[node.Key] = (1 - d) / graph.NodesCount + d * node.Parents.Sum(x => initPr / x.NumberOfEdges);
            }

            // 2
            foreach (var node in graph)
            {
                pageRank[node.Key] = (1 - d) / graph.NodesCount + d * node.Parents.Sum(x => pageRankNext[x.Key] / x.NumberOfEdges);
            }

            return(new PageRankResult(pageRank));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Calculate page rank for graph
        /// </summary>
        /// <param name="graph">Source graph</param>
        /// <param name="d">Damping factor</param>
        /// <returns>Calculated page rank</returns>
        public static PageRankResult PageRank(this IPageRankGraph graph, double d = 0.85)
        {
            var pageRank     = new Dictionary <uint, double>();
            var pageRankNext = new Dictionary <uint, double>();

            double initPr = 1.0 / graph.NodesCount;

            // 1
            foreach (var node in graph)
            {
                pageRankNext[node] = (1 - d) / graph.NodesCount + d * graph.Parents(node).Sum(x => initPr / graph.EdgesCount(x));
            }

            // 2
            foreach (var node in graph)
            {
                pageRank[node] = (1 - d) / graph.NodesCount + d * graph.Parents(node).Sum(x => pageRankNext[x] / graph.EdgesCount(x));
            }

            return(new PageRankResult(pageRank));
        }