Skip to content

Commit f345696

Browse files
author
Hamid Gasmi
committed
#186 is completed
1 parent 22b9bca commit f345696

File tree

1 file changed

+46
-5
lines changed

1 file changed

+46
-5
lines changed

09-problems/graph-algorithms-in-genome-sequencing/de_bruijn_string.py

+46-5
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,59 @@
22

33
class De_Bruijn_Graph:
44
def __init__(self, k, text):
5-
pass
5+
6+
assert(k > 1)
7+
assert(len(text) >= k)
68

7-
def _build_adjacency_list(self):
8-
pass
9+
self._build_gragh(k, text)
10+
11+
def _build_gragh(self, k, text):
12+
13+
self.nodes = []
14+
self.adjacency_list = []
15+
node_kmer_no_dict = dict()
16+
for i in range(len(text) - k + 1):
17+
18+
prefix_node_no = self.get_node_no(text[0:k-1], node_kmer_no_dict) if i == 0 else suffix_node_no
19+
suffix_node_no = self.get_node_no(text[i+1:i+k], node_kmer_no_dict)
20+
21+
self.adjacency_list[prefix_node_no].append(suffix_node_no)
22+
23+
def get_node_no(self, kmer, node_kmer_no_dict):
24+
25+
if kmer in node_kmer_no_dict:
26+
node_no = node_kmer_no_dict[kmer]
27+
28+
else:
29+
node_no = len(self.nodes)
30+
self.nodes.append(kmer)
31+
self.adjacency_list.append([])
32+
node_kmer_no_dict[kmer] = node_no
33+
34+
return node_no
935

1036
def str_adjacency_list(self):
11-
pass
37+
38+
result_list = []
39+
for node in range(len(self.nodes)):
40+
if len(self.adjacency_list[node]) == 0:
41+
continue
42+
43+
node_adjacents = [ self.nodes[node] ]
44+
node_adjacents.append(' -> ')
45+
for a in range(len(self.adjacency_list[node])):
46+
adjacent_node_id = self.adjacency_list[node][a]
47+
node_adjacents.append(self.nodes[adjacent_node_id])
48+
if a < len(self.adjacency_list[node]) - 1:
49+
node_adjacents.append(',')
50+
result_list.append(''.join(node_adjacents))
51+
52+
return '\n'.join(result_list)
1253

1354
if __name__ == "__main__":
1455
k = int(sys.stdin.readline().strip())
1556
text = sys.stdin.readline().strip()
1657

1758
de_bruijn_graph = De_Bruijn_Graph(k, text)
18-
59+
1960
print(de_bruijn_graph.str_adjacency_list())

0 commit comments

Comments
 (0)