Exemplo n.º 1
0
 def edges(self):
     flow_edge_list = Bag()
     for v in range(self._v):
         for e in self.adj(v):
             if e.head() != v:
                 flow_edge_list.add(e)
     return flow_edge_list
Exemplo n.º 2
0
    def __init__(self, synsets=None, hypernyms=None):
        self._nouns_dict = defaultdict(Bag)
        self._reverse_nouns_dict = defaultdict(str)
        max_id = 0

        with open(synsets) as f:
            lines = f.readlines()
            for line in lines:
                items = "".join(line.splitlines()).split(',')
                nouns = items[1].split(' ')

                for i in range(len(nouns)):
                    if nouns[i] not in self._nouns_dict:
                        nouns_list = Bag()
                    else:
                        nouns_list = self._nouns_dict.get(nouns[i])
                    nouns_list.add(int(items[0]))
                    self._nouns_dict[nouns[i]] = nouns_list
                self._reverse_nouns_dict[int(items[0])] = items[1]
                max_id = max(max_id, int(items[0]))

        self._dg = Digraph(max_id + 1)

        with open(hypernyms) as f1:
            lines = f1.readlines()
            for line in lines:
                items = "".join(line.splitlines()).split(',')
                v = int(items[0])
                for i in range(1, len(items)):
                    w = int(items[i])
                    self._dg.add_edge(v, w)

        # if not self._is_dag(self._dg):
        #     raise AttributeError('digraph is not acyclic')
        self._sap = SAP(self._dg)
Exemplo n.º 3
0
 def __init__(self, v, e=0):
     if v < 0:
         raise AttributeError('Number of vertices in a Graph must be nonnegative')
     self._v = v
     self._e = e
     self._adj = defaultdict(Bag)
     for vertice in range(v):
         self._adj[vertice] = Bag()
Exemplo n.º 4
0
 def __init__(self, v):
     if v < 0:
         raise AttributeError('Number of vertices must be non-negative')
     self.V = v
     self.E = 0
     self.adj = defaultdict(Bag)
     for i in range(v):
         self.adj[i] = Bag()
Exemplo n.º 5
0
 def __init__(self, v):
     """
     Initializes an empty graph with V vertices and 0 edges.
     :param v: the number of vertices
     """
     if v < 0:
         raise ValueError('Number of vertices must be non-negative')
     self.V = v
     self.E = 0
     self._indegree = [0 for _ in range(v)]
     self.adj = defaultdict(Bag)
     for v in range(v):
         self.adj[v] = Bag()
Exemplo n.º 6
0
 def __init__(self, v):
     """
     Initializes an empty graph with V vertices and 0 edges.
     :param v: the number of vertices
     """
     if v < 0:
         raise ValueError('Number of vertices must be non-negative')
     self.V = v + 1
     self.E = 0
     # self.adj = defaultdict(deque)  /* without LinkedList */
     self.adj = defaultdict(Bag)
     for v in range(v):
         # self.adj[v] = deque()  /* without LinkedList */
         self.adj[v] = Bag()
Exemplo n.º 7
0
 def edges(self):
     adj_list = Bag()
     for v in range(self.get_V()):
         self_loops = 0
         for e in self.adj_vertices(v):
             if e.item.other(
                     v
             ) > v:  # if e.v == v, return e.w; if e.w == v, return e.v
                 adj_list.add(e.item)
             # add only one copy of each self loop (self loops will be consecutive)
             elif e.item.other(v) == v:
                 if self_loops % 2 == 0:
                     adj_list.add(e.item)
                 self_loops += 1
     return adj_list
Exemplo n.º 8
0
def main():

    file_name = '../resources/tinyDG.txt'
    with open(file_name) as f:
        ints = list()
        for line in f.read().split('\n'):
            ints.append(line)
        vertices, edges = int(ints[0]), int(ints[1])

    graph = Digraph(vertices)
    # print(graph)
    inp = ints[
        2:]  # skip first 2 lines in tiny.DG.txt i.e. # of vertices and edges
    sources = Bag()
    sources.add(1)
    sources.add(5)
    sources.add(10)

    for i in range(edges):
        v, w = inp[i].split(' ')
        graph.add_edge(int(v), int(w))

    # print(graph)

    # s = 6
    # reachable from single source vertex, s
    # dfs = DirectedDFS(graph, int(s))
    # print(dfs)

    # reachable from many source vertices, sources
    dfs = DirectedDFS(graph, sources)
    # print(dfs)

    for v in range(graph.get_V()):
        if dfs.marked(v):
            print(f'{v} ')
 def edges(self):
     adj_list = Bag()
     for v in range(self.get_V()):
         for e in self.adj_vertices(v):
             adj_list.add(e)
     return adj_list
Exemplo n.º 10
0
    def recognizes(self, txt):
        # first create a digraph starting from state 0
        dfs = DirectedDFS(self._graph, 0)
        pc = Bag()
        # find a set of states reachable from start 0
        for v in range(self._graph.get_V()):
            if dfs.marked(v):
                pc.add(v)

        # Compute possible NFA states for txt[i+1]
        for i in range(len(txt)):
            # read next input character
            if txt[i] == '*' or txt[i] == '|' or txt[i] == '(' or txt[i] == ')':
                raise ValueError(
                    f'text contains the meta-character "{txt[i]}"')
            match = Bag()
            for v in pc:
                if v.item == self._m:
                    continue
                if self._regex[v.item] == txt[i] or self._regex[v.item] == '.':
                    match.add(v.item + 1)
            dfs = DirectedDFS(self._graph, match)
            # print('dfs',dfs)
            pc = Bag()
            for v in range(self._graph.get_V()):
                if dfs.marked(v):
                    pc.add(v)
            if pc.size() == 0:
                return False

        # check for accept state
        for v in pc:
            if v.item == self._m:
                return True
        return False