From 2eb6d5c1413fa2edb55a6723ab2bea6f608afb2e Mon Sep 17 00:00:00 2001 From: Dilrose Reji <70878223+dilroseR@users.noreply.github.com> Date: Fri, 22 Oct 2021 09:53:21 +0530 Subject: [PATCH] Add Page Rank (#2614) --- Others/PageRank.java | 94 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Others/PageRank.java diff --git a/Others/PageRank.java b/Others/PageRank.java new file mode 100644 index 000000000..fc4fed0fc --- /dev/null +++ b/Others/PageRank.java @@ -0,0 +1,94 @@ +package Others; + +import java.util.*; + +class PageRank { + public static void main(String args[]) { + int nodes, i, j; + Scanner in = new Scanner(System.in); + System.out.print("Enter the Number of WebPages: "); + nodes = in.nextInt(); + PageRank p = new PageRank(); + System.out.println("Enter the Adjacency Matrix with 1->PATH & 0->NO PATH Between two WebPages: "); + for (i = 1; i <= nodes; i++) + for (j = 1; j <= nodes; j++) { + p.path[i][j] = in.nextInt(); + if (j == i) + p.path[i][j] = 0; + } + p.calc(nodes); + } + + public int path[][] = new int[10][10]; + public double pagerank[] = new double[10]; + + public void calc(double totalNodes) { + + double InitialPageRank; + double OutgoingLinks = 0; + double DampingFactor = 0.85; + double TempPageRank[] = new double[10]; + int ExternalNodeNumber; + int InternalNodeNumber; + int k = 1; // For Traversing + int ITERATION_STEP = 1; + InitialPageRank = 1 / totalNodes; + System.out.printf( + " Total Number of Nodes :" + totalNodes + "\t Initial PageRank of All Nodes :" + InitialPageRank + "\n"); + + // 0th ITERATION _ OR _ INITIALIZATION PHASE // + + for (k = 1; k <= totalNodes; k++) { + this.pagerank[k] = InitialPageRank; + } + System.out.printf("\n Initial PageRank Values , 0th Step \n"); + + for (k = 1; k <= totalNodes; k++) { + System.out.printf(" Page Rank of " + k + " is :\t" + this.pagerank[k] + "\n"); + } + + while (ITERATION_STEP <= 2) // Iterations + { + // Store the PageRank for All Nodes in Temporary Array + for (k = 1; k <= totalNodes; k++) { + TempPageRank[k] = this.pagerank[k]; + this.pagerank[k] = 0; + } + + for (InternalNodeNumber = 1; InternalNodeNumber <= totalNodes; InternalNodeNumber++) { + for (ExternalNodeNumber = 1; ExternalNodeNumber <= totalNodes; ExternalNodeNumber++) { + if (this.path[ExternalNodeNumber][InternalNodeNumber] == 1) { + k = 1; + OutgoingLinks = 0; // Count the Number of Outgoing Links for each ExternalNodeNumber + while (k <= totalNodes) { + if (this.path[ExternalNodeNumber][k] == 1) { + OutgoingLinks = OutgoingLinks + 1; // Counter for Outgoing Links + } + k = k + 1; + } + // Calculate PageRank + this.pagerank[InternalNodeNumber] += TempPageRank[ExternalNodeNumber] * (1 / OutgoingLinks); + } + } + System.out.printf("\n After " + ITERATION_STEP + "th Step \n"); + + for (k = 1; k <= totalNodes; k++) + System.out.printf(" Page Rank of " + k + " is :\t" + this.pagerank[k] + "\n"); + + ITERATION_STEP = ITERATION_STEP + 1; + } + + // Add the Damping Factor to PageRank + for (k = 1; k <= totalNodes; k++) { + this.pagerank[k] = (1 - DampingFactor) + DampingFactor * this.pagerank[k]; + } + + // Display PageRank + System.out.printf("\n Final Page Rank : \n"); + for (k = 1; k <= totalNodes; k++) { + System.out.printf(" Page Rank of " + k + " is :\t" + this.pagerank[k] + "\n"); + } + + } + } +}