Python - Graphen

Ein Diagramm ist eine bildliche Darstellung einer Gruppe von Objekten, bei denen einige Objektpaare durch Verknüpfungen verbunden sind. Die miteinander verbundenen Objekte werden durch Punkte dargestellt, die als Scheitelpunkte bezeichnet werden, und die Verknüpfungen, die die Scheitelpunkte verbinden, werden als Kanten bezeichnet. Die verschiedenen Begriffe und Funktionen, die mit einem Diagramm verbunden sind, werden in unserem Tutorial hier ausführlich beschrieben. In diesem Kapitel erfahren Sie, wie Sie mit einem Python-Programm ein Diagramm erstellen und verschiedene Datenelemente hinzufügen. Im Folgenden sind die grundlegenden Operationen aufgeführt, die wir für Diagramme ausführen.

  • Diagrammscheitelpunkte anzeigen
  • Diagrammkanten anzeigen
  • Fügen Sie einen Scheitelpunkt hinzu
  • Fügen Sie eine Kante hinzu
  • Diagramm erstellen

Mit den Datentypen des Python-Wörterbuchs kann ein Diagramm einfach dargestellt werden. Wir repräsentieren die Eckpunkte als Schlüssel des Wörterbuchs und die Verbindung zwischen den Eckpunkten, die auch als Kanten bezeichnet werden, als Werte im Wörterbuch.

Schauen Sie sich die folgende Grafik an -

In der obigen Grafik

V = {a, b, c, d, e}
E = {ab, ac, bd, cd, de}

Wir können dieses Diagramm in einem Python-Programm wie folgt darstellen.

# Create the dictionary with graph elements
graph = { "a" : ["b","c"],
          "b" : ["a", "d"],
          "c" : ["a", "d"],
          "d" : ["e"],
          "e" : ["d"]
         }

# Print the graph 		 
print(graph)

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

{'c': ['a', 'd'], 'a': ['b', 'c'], 'e': ['d'], 'd': ['e'], 'b': ['a', 'd']}

Diagrammscheitelpunkte anzeigen

Um die Diagrammscheitelpunkte anzuzeigen, finden wir einfach die Schlüssel des Diagrammwörterbuchs. Wir verwenden die Methode keys ().

class graph:
    def __init__(self,gdict=None):
        if gdict is None:
            gdict = []
        self.gdict = gdict

# Get the keys of the dictionary
    def getVertices(self):
        return list(self.gdict.keys())

# Create the dictionary with graph elements
graph_elements = { "a" : ["b","c"],
                "b" : ["a", "d"],
                "c" : ["a", "d"],
                "d" : ["e"],
                "e" : ["d"]
                }

g = graph(graph_elements)

print(g.getVertices())

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

['d', 'b', 'e', 'c', 'a']

Diagrammkanten anzeigen

Das Finden der Diagrammkanten ist etwas schwieriger als die Scheitelpunkte, da wir jedes der Scheitelpunktpaare finden müssen, zwischen denen sich eine Kante befindet. Wir erstellen also eine leere Liste von Kanten und durchlaufen dann die Kantenwerte, die jedem der Scheitelpunkte zugeordnet sind. Es wird eine Liste gebildet, die die unterschiedliche Gruppe von Kanten enthält, die von den Eckpunkten gefunden wurden.

class graph:

    def __init__(self,gdict=None):
        if gdict is None:
            gdict = {}
        self.gdict = gdict

    def edges(self):
        return self.findedges()
# Find the distinct list of edges

    def findedges(self):
        edgename = []
        for vrtx in self.gdict:
            for nxtvrtx in self.gdict[vrtx]:
                if {nxtvrtx, vrtx} not in edgename:
                    edgename.append({vrtx, nxtvrtx})
        return edgename

# Create the dictionary with graph elements
graph_elements = { "a" : ["b","c"],
                "b" : ["a", "d"],
                "c" : ["a", "d"],
                "d" : ["e"],
                "e" : ["d"]
                }

g = graph(graph_elements)

print(g.edges())

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

[{'b', 'a'}, {'b', 'd'}, {'e', 'd'}, {'a', 'c'}, {'c', 'd'}]

Hinzufügen eines Scheitelpunkts

Das Hinzufügen eines Scheitelpunkts ist unkompliziert, wenn wir dem Diagrammwörterbuch einen weiteren zusätzlichen Schlüssel hinzufügen.

class graph:

    def __init__(self,gdict=None):
        if gdict is None:
            gdict = {}
        self.gdict = gdict

    def getVertices(self):
        return list(self.gdict.keys())

# Add the vertex as a key
    def addVertex(self, vrtx):
       if vrtx not in self.gdict:
            self.gdict[vrtx] = []

# Create the dictionary with graph elements
graph_elements = { "a" : ["b","c"],
                "b" : ["a", "d"],
                "c" : ["a", "d"],
                "d" : ["e"],
                "e" : ["d"]
                }

g = graph(graph_elements)

g.addVertex("f")

print(g.getVertices())

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

['f', 'e', 'b', 'a', 'c','d']

Eine Kante hinzufügen

Das Hinzufügen einer Kante zu einem vorhandenen Diagramm umfasst das Behandeln des neuen Scheitelpunkts als Tupel und das Überprüfen, ob die Kante bereits vorhanden ist. Wenn nicht, wird die Kante hinzugefügt.

class graph:

    def __init__(self,gdict=None):
        if gdict is None:
            gdict = {}
        self.gdict = gdict

    def edges(self):
        return self.findedges()
# Add the new edge

    def AddEdge(self, edge):
        edge = set(edge)
        (vrtx1, vrtx2) = tuple(edge)
        if vrtx1 in self.gdict:
            self.gdict[vrtx1].append(vrtx2)
        else:
            self.gdict[vrtx1] = [vrtx2]

# List the edge names
    def findedges(self):
        edgename = []
        for vrtx in self.gdict:
            for nxtvrtx in self.gdict[vrtx]:
                if {nxtvrtx, vrtx} not in edgename:
                    edgename.append({vrtx, nxtvrtx})
        return edgename

# Create the dictionary with graph elements
graph_elements = { "a" : ["b","c"],
                "b" : ["a", "d"],
                "c" : ["a", "d"],
                "d" : ["e"],
                "e" : ["d"]
                }

g = graph(graph_elements)
g.AddEdge({'a','e'})
g.AddEdge({'a','c'})
print(g.edges())

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

[{'e', 'd'}, {'b', 'a'}, {'b', 'd'}, {'a', 'c'}, {'a', 'e'}, {'c', 'd'}]