From 9aa7d22b754aaadf12cd11ec58288e49e1badd4c Mon Sep 17 00:00:00 2001 From: bhushan-borole <37565807+bhushan-borole@users.noreply.github.com> Date: Fri, 3 May 2019 20:25:50 +0530 Subject: [PATCH 1/2] Added page-rank algorithm implementation --- Graphs/pagerank.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Graphs/pagerank.py diff --git a/Graphs/pagerank.py b/Graphs/pagerank.py new file mode 100644 index 000000000000..b81234cb0191 --- /dev/null +++ b/Graphs/pagerank.py @@ -0,0 +1,76 @@ +''' +Author: https://github.com/bhushan-borole +''' +''' +The input graph for the algorithm is: + + A B C +A 0 1 1 +B 0 0 1 +C 1 0 0 + +''' + +DATA = [[0, 1, 1], + [0, 0, 1], + [1, 0, 0]] + + +class Node: + def __init__(self, name): + self.name = name + self.inbound = [] + self.outbound = [] + + def add_inbound(self, node): + self.inbound.append(node) + + def add_outbound(self, node): + self.outbound.append(node) + + def __repr__(self): + return 'Node {}: Inbound: {} ; Outbound: {}'.format(self.name, + self.inbound, + self.outbound) + + +def page_rank(nodes, limit=3, d=0.85): + ranks = {} + for node in nodes: + ranks[node.name] = 1 + + outbounds = {} + for node in nodes: + outbounds[node.name] = len(node.outbound) + + for i in range(limit): + print("======= Iteration {} =======".format(i+1)) + for j, node in enumerate(nodes): + ranks[node.name] = (1 - d) + d * sum([ ranks[ib]/outbounds[ib] for ib in node.inbound ]) + print(ranks) + + +def main(): + names = list(input('Enter Names: ').split()) + + nodes = [Node(name) for name in names] + + for ri, row in enumerate(DATA): + for ci, col in enumerate(row): + if col == 1: + nodes[ci].add_inbound(names[ri]) + nodes[ri].add_outbound(names[ci]) + + print("======= Nodes =======") + for node in nodes: + print(node) + + page_rank(nodes) + + +if __name__ == '__main__': + main() + + + + From 77505964870490d1ee4da251120e5224b1dff6be Mon Sep 17 00:00:00 2001 From: bhushan-borole <37565807+bhushan-borole@users.noreply.github.com> Date: Wed, 8 May 2019 08:26:24 +0530 Subject: [PATCH 2/2] changed init variables --- Graphs/pagerank.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Graphs/pagerank.py b/Graphs/pagerank.py index b81234cb0191..59f15a99e6b2 100644 --- a/Graphs/pagerank.py +++ b/Graphs/pagerank.py @@ -11,7 +11,7 @@ ''' -DATA = [[0, 1, 1], +graph = [[0, 1, 1], [0, 0, 1], [1, 0, 0]] @@ -51,11 +51,11 @@ def page_rank(nodes, limit=3, d=0.85): def main(): - names = list(input('Enter Names: ').split()) + names = list(input('Enter Names of the Nodes: ').split()) nodes = [Node(name) for name in names] - for ri, row in enumerate(DATA): + for ri, row in enumerate(graph): for ci, col in enumerate(row): if col == 1: nodes[ci].add_inbound(names[ri]) @@ -69,8 +69,4 @@ def main(): if __name__ == '__main__': - main() - - - - + main() \ No newline at end of file