Skip to content

Commit 6ee6f12

Browse files
authored
Merge branch 'master' into master
2 parents 1bc3a17 + 75ccf5b commit 6ee6f12

19 files changed

+977
-43
lines changed

Diff for: .travis.yml

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ python:
66
- "3.5"
77
- "3.6"
88
- "3.6-dev"
9-
- "3.7-dev"
10-
- "nightly"
9+
1110
install:
1211
- if [ "$TRAVIS_PYTHON_VERSION" == "3.2" ]; then travis_retry pip install coverage==3.7.1; fi
1312
- if [ "$TRAVIS_PYTHON_VERSION" != "3.2" ]; then travis_retry pip install coverage; fi

Diff for: Graphs/Breadth_First_Search.py

+33-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
class Graph:
1+
class GRAPH:
2+
"""docstring for GRAPH"""
3+
def __init__(self, nodes):
4+
self.nodes=nodes
5+
self.graph=[[0]*nodes for i in range (nodes)]
6+
self.visited=[0]*nodes
27

3-
def __init__(self, vertex):
4-
self.vertex = vertex
5-
self.graph = [[0] * vertex for i in range(vertex) ]
6-
7-
def add_edge(self, u, v):
8-
self.graph[u - 1][v - 1] = 1
9-
self.graph[v - 1][u - 1] = 1
108

119
def show(self):
1210

@@ -43,3 +41,30 @@ def bfs(self,v):
4341
g.add_edge(5,9)
4442
g.add_edge(6,10)
4543
g.bfs(4)
44+
=======
45+
print self.graph
46+
47+
def add_edge(self, i, j):
48+
self.graph[i][j]=1
49+
self.graph[j][i]=1
50+
51+
def bfs(self,s):
52+
queue=[s]
53+
self.visited[s]=1
54+
while len(queue)!=0:
55+
x=queue.pop(0)
56+
print(x)
57+
for i in range(0,self.nodes):
58+
if self.graph[x][i]==1 and self.visited[i]==0:
59+
queue.append(i)
60+
self.visited[i]=1
61+
62+
n=int(input("Enter the number of Nodes : "))
63+
g=GRAPH(n)
64+
e=int(input("Enter the no of edges : "))
65+
print("Enter the edges (u v)")
66+
for i in range(0,e):
67+
u,v=map(int, raw_input().split())
68+
g.add_edge(u,v)
69+
s=int(input("Enter the source node :"))
70+
g.bfs(s)

Diff for: Graphs/Deep_First_Search.py

+25-26
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
1-
class Graph:
1+
class GRAPH:
2+
"""docstring for GRAPH"""
3+
def __init__(self, nodes):
4+
self.nodes=nodes
5+
self.graph=[[0]*nodes for i in range (nodes)]
6+
self.visited=[0]*nodes
27

3-
def __init__(self, vertex):
4-
self.vertex = vertex
5-
self.graph = [[0] * vertex for i in range(vertex) ]
6-
self.visited = [False] * vertex
78

8-
def add_edge(self, u, v):
9-
self.graph[u - 1][v - 1] = 1
10-
self.graph[v - 1][u - 1] = 1
119
def show(self):
10+
print self.graph
1211

13-
for i in self.graph:
14-
for j in i:
15-
print(j, end=' ')
16-
print(' ')
12+
def add_edge(self, i, j):
13+
self.graph[i][j]=1
14+
self.graph[j][i]=1
1715

18-
19-
def dfs(self, u):
20-
self.visited[u - 1] = True
21-
print('%d visited' % u)
22-
for i in range(1, self.vertex + 1):
23-
if self.graph[u - 1][i - 1] == 1 and self.visited[i - 1] == False:
16+
def dfs(self,s):
17+
self.visited[s]=1
18+
print(s)
19+
for i in range(0,self.nodes):
20+
if self.visited[i]==0 and self.graph[s][i]==1:
2421
self.dfs(i)
22+
2523

26-
27-
g = Graph(5)
28-
g.add_edge(1,4)
29-
g.add_edge(4,2)
30-
g.add_edge(4,5)
31-
g.add_edge(2,5)
32-
g.add_edge(5,3)
33-
g.dfs(1)
24+
n=int(input("Enter the number of Nodes : "))
25+
g=GRAPH(n)
26+
e=int(input("Enter the no of edges : "))
27+
print("Enter the edges (u v)")
28+
for i in range(0,e):
29+
u,v=map(int, raw_input().split())
30+
g.add_edge(u,v)
31+
s=int(input("Enter the source node :"))
32+
g.dfs(s)

Diff for: README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ __Properties__
7474
### Shell
7575
![alt text][shell-image]
7676

77-
From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywherem considereing every nth element gives a sorted list. Such a list is said to be h-sorted. Equivanelty, it can be thought of as h intterleaved lists, each individually sorted.
77+
From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted.
7878

7979
__Properties__
8080
* Worst case performance O(nlog2 2n)
@@ -83,7 +83,7 @@ __Properties__
8383

8484
###### View the algorithm in [action][shell-toptal]
8585

86-
###Time-Compexity Graphs
86+
### Time-Compexity Graphs
8787

8888
Comparing the complexity of sorting algorithms (Bubble Sort, Insertion Sort, Selection Sort)
8989

Diff for: data_structures/AVL/AVL.py

+131
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
'''
2+
A AVL tree
3+
'''
4+
5+
6+
class Node:
7+
8+
def __init__(self, label):
9+
self.label = label
10+
self.left = None
11+
self.rigt = None
12+
self.parent = None
13+
self.height = 0
14+
15+
def getLabel(self):
16+
return self.label
17+
18+
def setLabel(self, label):
19+
self.label = label
20+
21+
def getLeft(self):
22+
return self.left
23+
24+
def setLeft(self, left):
25+
self.left = left
26+
27+
def getRight(self):
28+
return self.rigt
29+
30+
def setRight(self, right):
31+
self.rigt = right
32+
33+
def getParent(self):
34+
return self.parent
35+
36+
def setParent(self, parent):
37+
self.parent = parent
38+
39+
def setHeight(self, height):
40+
self.height = height
41+
42+
def getHeight(self, height):
43+
return self.height
44+
45+
46+
class AVL:
47+
48+
def __init__(self):
49+
self.root = None
50+
self.size = 0
51+
52+
def insert(self, value):
53+
node = Node(value)
54+
if self.root is None:
55+
self.root = node
56+
self.size = 1
57+
else:
58+
# Same as Binary Tree
59+
dad_node = None
60+
curr_node = self.root
61+
62+
while True:
63+
if curr_node is not None:
64+
65+
dad_node = curr_node
66+
67+
if node.getLabel() < curr_node.getLabel():
68+
curr_node = curr_node.getLeft()
69+
else:
70+
curr_node = curr_node.getRight()
71+
else:
72+
if node.getLabel() < dad_node.getLabel():
73+
dad_node.setLeft(node)
74+
dad_node.setHeight(dad_node.getHeight() + 1)
75+
76+
if (dad_node.getRight().getHeight() -
77+
dad_node.getLeft.getHeight() > 1):
78+
self.rebalance(dad_node)
79+
80+
else:
81+
dad_node.setRight(node)
82+
dad_node.setHeight(dad_node.getHeight() + 1)
83+
84+
if (dad_node.getRight().getHeight() -
85+
dad_node.getLeft.getHeight() > 1):
86+
self.rebalance(dad_node)
87+
break
88+
89+
def rebalance(self, node):
90+
if (node.getRight().getHeight() -
91+
node.getLeft.getHeight() > 1):
92+
if (node.getRight().getHeight() >
93+
node.getLeft.getHeight()):
94+
pass
95+
else:
96+
pass
97+
pass
98+
elif (node.getRight().getHeight() -
99+
node.getLeft.getHeight() > 2):
100+
if (node.getRight().getHeight() >
101+
node.getLeft.getHeight()):
102+
pass
103+
else:
104+
pass
105+
pass
106+
pass
107+
108+
def rotate_left(self, node):
109+
# TODO: is this pythonic enought?
110+
aux = node.getLabel()
111+
node = aux.getRight()
112+
node.setHeight(node.getHeight() - 1)
113+
node.setLeft(Node(aux))
114+
node.getLeft().setHeight(node.getHeight() + 1)
115+
node.getRight().setHeight(node.getRight().getHeight() - 1)
116+
117+
def rotate_right(self, node):
118+
aux = node.getLabel()
119+
node = aux.getLeft()
120+
node.setHeight(node.getHeight() - 1)
121+
node.setRight(Node(aux))
122+
node.getLeft().setHeight(node.getHeight() + 1)
123+
node.getLeft().setHeight(node.getLeft().getHeight() - 1)
124+
125+
def double_rotate_left(self, node):
126+
self.rotate_right(node.getRight().getRight())
127+
self.rotate_left(node)
128+
129+
def double_rotate_right(self, node):
130+
self.rotate_left(node.getLeft().getLeft())
131+
self.rotate_right(node)

Diff for: data_structures/Binary Tree/binary_seach_tree.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
'''
22
A binary search Tree
33
'''
4+
5+
46
class Node:
57

68
def __init__(self, label):
@@ -12,7 +14,7 @@ def getLabel(self):
1214
return self.label
1315

1416
def setLabel(self, label):
15-
self.label = label
17+
self.label = label
1618

1719
def getLeft(self):
1820
return self.left
@@ -34,7 +36,7 @@ def __init__(self):
3436

3537
def insert(self, label):
3638

37-
#Create a new Node
39+
# Create a new Node
3840

3941
node = Node(label)
4042

@@ -45,7 +47,7 @@ def insert(self, label):
4547
curr_node = self.root
4648

4749
while True:
48-
if curr_node != None:
50+
if curr_node is not None:
4951

5052
dad_node = curr_node
5153

@@ -61,12 +63,12 @@ def insert(self, label):
6163
break
6264

6365
def empty(self):
64-
if self.root == None:
66+
if self.root is None:
6567
return True
6668
return False
6769

6870
def preShow(self, curr_node):
69-
if curr_node != None:
71+
if curr_node is None:
7072
print(curr_node.getLabel(), end=" ")
7173

7274
self.preShow(curr_node.getLeft())

Diff for: data_structures/Graph/Graph.py

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Author: OMKAR PATHAK
2+
3+
# We can use Python's dictionary for constructing the graph
4+
5+
class AdjacencyList(object):
6+
def __init__(self):
7+
self.List = {}
8+
9+
def addEdge(self, fromVertex, toVertex):
10+
# check if vertex is already present
11+
if fromVertex in self.List.keys():
12+
self.List[fromVertex].append(toVertex)
13+
else:
14+
self.List[fromVertex] = [toVertex]
15+
16+
def printList(self):
17+
for i in self.List:
18+
print(i,'->',' -> '.join([str(j) for j in self.List[i]]))
19+
20+
if __name__ == '__main__':
21+
al = AdjacencyList()
22+
al.addEdge(0, 1)
23+
al.addEdge(0, 4)
24+
al.addEdge(4, 1)
25+
al.addEdge(4, 3)
26+
al.addEdge(1, 0)
27+
al.addEdge(1, 4)
28+
al.addEdge(1, 3)
29+
al.addEdge(1, 2)
30+
al.addEdge(2, 3)
31+
al.addEdge(3, 4)
32+
33+
al.printList()
34+
35+
# OUTPUT:
36+
# 0 -> 1 -> 4
37+
# 1 -> 0 -> 4 -> 3 -> 2
38+
# 2 -> 3
39+
# 3 -> 4
40+
# 4 -> 1 -> 3

0 commit comments

Comments
 (0)