Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Graphenimplementierung | Graphen
Überblick Über Algorithmen und Datenstrukturen
course content

Kursinhalt

Überblick Über Algorithmen und Datenstrukturen

Überblick Über Algorithmen und Datenstrukturen

1. Einführung in ADS
2. Liste und Array
3. Fortgeschrittene Datenstrukturen
4. Graphen

book
Graphenimplementierung

Nun werden wir 3 Arten der Graphimplementierung in Python betrachten.

Implementierung mit der graphviz-Bibliothek

Graphviz ist eine leistungsstarke Bibliothek zum Erstellen und Visualisieren von Graphen. Sie bietet eine einfache und intuitive Schnittstelle zur Erstellung von Graphvisualisierungen, was sie ideal für die Darstellung komplexer Graphstrukturen macht.

import graphviz

class Graph:
    def __init__(self):
        self.graph = graphviz.Graph()

    def add_vertex(self, vertex):
        self.graph.node(str(vertex))

    def add_edge(self, from_vertex, to_vertex):
        self.graph.edge(str(from_vertex), str(to_vertex))

    def get_neighbors(self, vertex):
        neighbors = []
        for edge in self.graph.body:
            if edge.startswith(f'{vertex}" ->'):
                neighbor = edge.split('-> ')[1].split(' [')[0]
                neighbors.append(neighbor)
        return neighbors

Implementierung mit Adjazenzmatrix

Eine Adjazenzmatrix ist eine quadratische Matrix, die verwendet wird, um einen Graphen darzustellen. In dieser Matrix entsprechen die Zeilen und Spalten den Knoten (oder Knotenpunkten) im Graphen, und das Vorhandensein oder Fehlen von Kanten zwischen den Knoten wird durch die Werte der Matrixelemente dargestellt.
Diese Implementierung bietet eine kompakte und effiziente Darstellung von Graphdaten, insbesondere für dichte Graphen mit vielen Verbindungen.

Hinweis

In einem gewichteten Graphen können die Werte in der Adjazenzmatrix die Gewichte der Kanten darstellen. Der Matrixwert kann entweder null oder unendlich sein, wenn keine Kante zwischen den Knoten vorhanden ist.

class Graph:
    def __init__(self, size):
        self.size = size
        self.matrix = np.zeros((size, size), dtype=int)

    def add_edge(self, from_vertex, to_vertex):
        self.matrix[from_vertex][to_vertex] = 1
        self.matrix[to_vertex][from_vertex] = 1

    def add_vertex(self):
        self.size += 1
        new_matrix = np.zeros((self.size, self.size), dtype=int)
        new_matrix[:self.size-1, :self.size-1] = self.matrix
        self.matrix = new_matrix

    def find_neighbors(self, vertex):
        neighbors = []
        for i in range(self.size):
            if self.matrix[vertex][i] == 1:
                neighbors.append(i)
        return neighbors

Implementierung mit Python-Dictionary

Die Implementierung eines Graphen mit einem Dictionary ist ein beliebter Ansatz in Python. In dieser Implementierung repräsentieren die Schlüssel des Dictionaries die Knoten (oder Knotenpunkte) des Graphen, und die Werte repräsentieren die Nachbarn (oder angrenzenden Knoten) jedes Knotens. Dies ermöglicht einen effizienten Zugriff auf die Nachbarn eines gegebenen Knotens.

class Graph:
    def __init__(self):
        self.graph = {}

    def add_vertex(self, vertex):
        if vertex not in self.graph:
            self.graph[vertex] = []

    def add_edge(self, from_vertex, to_vertex):
        if from_vertex in self.graph and to_vertex in self.graph:
            self.graph[from_vertex].append(to_vertex)
            self.graph[to_vertex].append(from_vertex)  # For undirected graph

    def get_neighbors(self, vertex):
        if vertex in self.graph:
            return self.graph[vertex]
        else:
            return []
question mark

Was ist eine Adjazenzmatrix?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

Überblick Über Algorithmen und Datenstrukturen

Überblick Über Algorithmen und Datenstrukturen

1. Einführung in ADS
2. Liste und Array
3. Fortgeschrittene Datenstrukturen
4. Graphen

book
Graphenimplementierung

Nun werden wir 3 Arten der Graphimplementierung in Python betrachten.

Implementierung mit der graphviz-Bibliothek

Graphviz ist eine leistungsstarke Bibliothek zum Erstellen und Visualisieren von Graphen. Sie bietet eine einfache und intuitive Schnittstelle zur Erstellung von Graphvisualisierungen, was sie ideal für die Darstellung komplexer Graphstrukturen macht.

import graphviz

class Graph:
    def __init__(self):
        self.graph = graphviz.Graph()

    def add_vertex(self, vertex):
        self.graph.node(str(vertex))

    def add_edge(self, from_vertex, to_vertex):
        self.graph.edge(str(from_vertex), str(to_vertex))

    def get_neighbors(self, vertex):
        neighbors = []
        for edge in self.graph.body:
            if edge.startswith(f'{vertex}" ->'):
                neighbor = edge.split('-> ')[1].split(' [')[0]
                neighbors.append(neighbor)
        return neighbors

Implementierung mit Adjazenzmatrix

Eine Adjazenzmatrix ist eine quadratische Matrix, die verwendet wird, um einen Graphen darzustellen. In dieser Matrix entsprechen die Zeilen und Spalten den Knoten (oder Knotenpunkten) im Graphen, und das Vorhandensein oder Fehlen von Kanten zwischen den Knoten wird durch die Werte der Matrixelemente dargestellt.
Diese Implementierung bietet eine kompakte und effiziente Darstellung von Graphdaten, insbesondere für dichte Graphen mit vielen Verbindungen.

Hinweis

In einem gewichteten Graphen können die Werte in der Adjazenzmatrix die Gewichte der Kanten darstellen. Der Matrixwert kann entweder null oder unendlich sein, wenn keine Kante zwischen den Knoten vorhanden ist.

class Graph:
    def __init__(self, size):
        self.size = size
        self.matrix = np.zeros((size, size), dtype=int)

    def add_edge(self, from_vertex, to_vertex):
        self.matrix[from_vertex][to_vertex] = 1
        self.matrix[to_vertex][from_vertex] = 1

    def add_vertex(self):
        self.size += 1
        new_matrix = np.zeros((self.size, self.size), dtype=int)
        new_matrix[:self.size-1, :self.size-1] = self.matrix
        self.matrix = new_matrix

    def find_neighbors(self, vertex):
        neighbors = []
        for i in range(self.size):
            if self.matrix[vertex][i] == 1:
                neighbors.append(i)
        return neighbors

Implementierung mit Python-Dictionary

Die Implementierung eines Graphen mit einem Dictionary ist ein beliebter Ansatz in Python. In dieser Implementierung repräsentieren die Schlüssel des Dictionaries die Knoten (oder Knotenpunkte) des Graphen, und die Werte repräsentieren die Nachbarn (oder angrenzenden Knoten) jedes Knotens. Dies ermöglicht einen effizienten Zugriff auf die Nachbarn eines gegebenen Knotens.

class Graph:
    def __init__(self):
        self.graph = {}

    def add_vertex(self, vertex):
        if vertex not in self.graph:
            self.graph[vertex] = []

    def add_edge(self, from_vertex, to_vertex):
        if from_vertex in self.graph and to_vertex in self.graph:
            self.graph[from_vertex].append(to_vertex)
            self.graph[to_vertex].append(from_vertex)  # For undirected graph

    def get_neighbors(self, vertex):
        if vertex in self.graph:
            return self.graph[vertex]
        else:
            return []
question mark

Was ist eine Adjazenzmatrix?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 2
some-alt