Datenstrukturen & Algorithmen

Tutorial zur Diagrammdatenstruktur

Tutorial zur Diagrammdatenstruktur
In der Informatik ist ein Graph eine Menge von Knoten, die durch Links verbunden sind. Der Hauptunterschied zwischen einem Baum und einem Graphen besteht darin, dass ein Baum einen Wurzelknoten hat, während ein Graph mehr als einen Wurzelknoten hat. Sie sollten bereits über grundlegende Kenntnisse der Baumdatenstruktur verfügen, bevor Sie hierher kommen, da die dortigen Konzepte hier ohne oder ohne Erklärung verwendet werden. Wenn Sie nicht über diese Kenntnisse verfügen, lesen Sie das Tutorial mit dem Titel Tree Data Structure Tutorial for Beginners unter dem Link https://linuxhint.com/tree_data_structure_tutorial_beginners/.

Ein Knoten in einem Graphen heißt Vertex (Plural - Vertices). Es wird manchmal immer noch als Knoten bezeichnet; es kann auch ein Punkt genannt werden. Eine Verknüpfung in einem Graphen heißt Kante. Es wird manchmal immer noch als Link bezeichnet; es kann auch eine Linie genannt werden.

Grafik mit vielen Funktionen

Diese Abbildung zeigt ein Diagramm mit vielen Funktionen:

Die Kreise (Scheiben) sind Scheitelpunkte. Jede gerade oder gebogene Linie oder Schleife ist eine Kante.

Merkmale des Diagramms

Scheitel

Ein Knoten ist ein Objekt. Es kann ein Haus sein; es kann eine Person sein; es kann ein abstraktes Nomen sein; Es kann jedes beliebige Objekt sein, das Sie sich vorstellen können.

Kante

Eine Kante ist eine Verbindung (Beziehung) zwischen zwei Scheitelpunkten; die Verbindung kann abstrakt sein.

Schleife

Eine Schleife ist eine Kante, die einen Knoten mit sich selbst verbindet.

Pfeilkante

Betrachten Sie zwei Personen: John und Peter. Wenn John Peter 100 US-Dollar leiht und wenn John und Peter Scheitelpunkte sind, zeigt die Kreditkante in Richtung Peter. Wenn beide Partner vergessen, dass Peter John schuldet und Peter ihm 100 US-Dollar leiht, zeigt am anderen Ende derselben Kante eine Pfeilspitze auf John. Wenn Peter John nur 75 US-Dollar und nicht 100 US-Dollar leihen würde, würde Peter ein anderer Vorteil mit John verbinden. Die Pfeilspitze dieser zweiten Kante zeigt in Richtung John. Im zweiten Fall gibt es zwei Kanten mit je einer Pfeilspitze, die in entgegengesetzte Richtungen zeigen.

Der Scheitelpunkt, auf den eine Kante zeigt, ist ein Kopfscheitelpunkt für diese Kante. Der Scheitel, von dem eine Kante abgeht, ist ein Schwanzscheitel.

Vorfall

Eine Kante verbindet zwei Ecken. Man sagt, dass die Kante auf einem der Knoten inzidiert. Die Kante muss keine Pfeilspitze haben. Die beiden Eckpunkte werden als Endpunkte der Kante bezeichnet. Es ist möglich, einen Graphen zu haben, bei dem ein Scheitelpunkt zu keiner Kante gehört, aber das wird in diesem Tutorial nicht berücksichtigt.

Ungerichteter Graph

Eine Kante kann ein Pfeil sein oder nicht. Ein Graph, bei dem keine Kante ein Pfeil ist, ist ein ungerichteter Graph. Eine Kante kann durch eine gerade Linie oder eine Kurve oder eine Schleife dargestellt werden.

Gerichteter Graph

Ein Graph, bei dem jede Kante ein Pfeil (Richtung) ist, ist ein gerichteter Graph. Eine Pfeilkante kann durch eine gerade Linie mit einer Pfeilspitze oder eine Kurve mit einer Pfeilspitze oder eine Schleife mit einer Pfeilspitze dargestellt werden.

Das Fehlen einer Richtung am Rand eines ungerichteten Graphen, dh jede Kante des ungerichteten Graphen, ist bidirektional.

Grad eines Scheitelpunkts

Die Anzahl der Kanten, die auf eine Ecke fallen, ist der Grad der Ecke. Eine Schleife hat zwei Vorkommen auf einem Scheitelpunkt, also wird eine Schleife zweimal gezählt.

Reihenfolge einer Grafik

Die Ordnung eines Graphen ist die Anzahl der Knoten im Graphen.

Multigraph

Ein Multigraph ist ein Graph, bei dem es für einige Knotenpaare mehr als eine Kante gibt. Ein ungerichteter Multigraph ist ein solcher Graph, bei dem die Kanten keine Richtungen haben (keine Pfeile sind). Ein gerichteter Multigraph ist einer, bei dem jede Kante ein Pfeil ist, und bei Scheitelpunktpaaren mit mehr als einem Pfeil ist ein Scheitelpunkt das Ende dieser Pfeile und der andere Scheitelpunkt die Spitze derselben Pfeile. Das folgende Diagramm zeigt einen ungerichteten Multigraphen:

Mehr als eine Kante (i.e. mehrere Kanten) für ein Knotenpaar werden auch als parallele Kanten bezeichnet.

Köcher

Ein Köcher ist ein Multigraph, der Schleifen erlaubt (eine oder mehrere Schleifen). Einige Multigraphen erlauben keine Schleifen.

Einfache Grafik

Ein einfacher Graph ist ein Graph, bei dem keine zwei Knotenpaare mehrere Kanten haben. Schleifen sind in einem einfachen Graphen nicht erlaubt.

Leeres Diagramm

Ein leerer Graph ist ein Graph ohne Knoten und damit ohne Kanten.

Gemischte Grafik

Ein gemischter Graph ist ein Graph, bei dem einige Kanten Pfeile sind und andere nicht; mit anderen Worten: manche Kanten haben Richtungen und andere sind nicht gerichtet.

Gewichtetes Diagramm

Es ist möglich, einen Graphen zu haben, in dem jeder Kante eine Zahl, bekannt als Gewicht, zugewiesen wird. Einige Kanten haben die gleiche Nummer, aber die Nummern sind im Allgemeinen unterschiedlich. Ein solcher Graph heißt gewichteter Graph. Die Zahlen für einen bestimmten Graphen können je nach Problem Längen oder Kosten (Preise) oder Größenordnungen darstellen.

Ingrade und Outdegree

Das Vokabular, indegree und outdegree sind nur auf einen gerichteten Graphen anwendbar. Der Graph kann ein Multigraph sein oder nicht not. Der Graph kann Schleifen haben oder nicht not.

Die Anzahl der Pfeilspitzen, die mit einem Scheitelpunkt verbunden sind, ist der Grad des Scheitelpunkts. Ein Pfeil mit einer einzelnen Pfeilspitze hat ein Kopfende und ein Schwanzende. Die Anzahl der mit einem Scheitelpunkt verbundenen Enden ist der Außengrad dieses Scheitelpunkts.

Hinweis: Ein Graph mit mehreren Kanten für das Scheitelpunktpaar, bei dem die mehreren Kanten in entgegengesetzte Richtungen verlaufen, wird in diesem Tutorial nicht behandelt.

Software-Darstellung eines Graphen

Ein Graph kann in Software so dargestellt werden, wie er im Diagramm gezeichnet wird. Ein Graph kann auch in Software durch eine mathematische Matrix (zweidimensionales Array) dargestellt werden. Eine dieser Matrizen heißt Adjazenzmatrix.

Adjazenzmatrix

Eine Adjazenzmatrix ist eine quadratische Matrix. Die Überschriften für die Zeilen sind alle Scheitelpunkte, in aufsteigender Reihenfolge geschrieben. Die Überschriften für die Spalten sind immer noch die gleichen Eckpunkte, in aufsteigender Reihenfolge geschrieben. Das Zählen der Zeilen oder Spalten einer Matrix beginnt bei 1 und nicht bei Null wie bei Arrays. Beim Identifizieren eines Elements in einer Matrix wird zuerst die Zeilennummer vor der Spaltennummer geschrieben.

Für einen ungerichteten Graphen ist jeder Eintrag (Element) in der Adjazenzmatrix die Anzahl der Kanten, die die beiden entsprechenden Knoten verbinden. Eine Schleife sollte zweimal gezählt werden. Für einen gerichteten Graphen ist jeder Eintrag in der Adjazenzmatrix entweder die Anzahl der Kanten, die einen Zeilenknoten verlassen und in den entsprechenden Spaltenknoten eintreten, oder ist die Anzahl der Kanten, die einen Spaltenknoten verlassen und in den entsprechenden Zeilenknoten eintreten. Die Wahl liegt beim Programmierer. In dieser Situation (in jedem Fall) sollte eine Schleife trotzdem einmal gezählt werden.

Hinweis: Ein Graph ist ein Diagramm ist eine eigenständige Datenstruktur. Eine Adjazenzmatrix ist auch eine eigene Datenstruktur structure.

Ungerichteter Graph und Adjazenzmatrix

Die folgenden Diagramme zeigen einen ungerichteten Graphen und die dazugehörige Adjazenzmatrix:

Die führende Diagonale einer Matrix ist die Diagonale von oben links nach unten rechts. Eine ungerichtete Matrix ist symmetrisch um die führende Diagonale. Der Matrixeintrag für Zeile A und Spalte C ist 1, was bedeutet, dass es eine Kante gibt, die Scheitelpunkt A und Scheitelpunkt C . verbindet. Der Matrixeintrag für Zeile C und Spalte B ist 3, was bedeutet, dass es 3 Kanten gibt, die Scheitelpunkt C und Scheitelpunkt B verbinden. Die anderen Einträge sind ähnlich erklärt.

Die Summe der Einträge für eine Zeile ergibt die Anzahl der Kanten (Grad) für den entsprechenden Knoten. Die Summe der Einträge für Zeile A ist 2, was bedeutet, dass 2 Kanten mit dem Knoten A verbunden sind. Die Summe der Einträge für Zeile B ist 6, was bedeutet, dass 6 Kanten mit Knoten B verbunden sind. Der Rest der Einträge wird ähnlich erklärt.

Gerichteter Graph und Adjazenzmatrix

Die folgenden Diagramme zeigen einen gerichteten Graphen und die dazugehörige Adjazenzmatrix:

Die Adjazenzmatrix für einen gerichteten Graphen ist nicht unbedingt symmetrisch um die führende Diagonale. Der Matrixeintrag für Zeile A und Spalte C ist 1, was bedeutet, dass eine Kante von Ecke A zu Ecke C geht. Der Matrixeintrag für Zeile C und Spalte B ist 3, d. h. 3 Kanten gehen von Ecke C zu Ecke B. Die anderen Einträge sind ähnlich erklärt.

Die Summe der Einträge für eine Spalte ergibt den Ingrad für den (Spalten-)Scheitelpunkt. Die Summe der Einträge für eine Zeile ergibt den Outdegree für den (Zeilen-)Vertex. Die Summe der Einträge für Spalte A ist 1, was bedeutet, dass eine Kante auf den Knoten A gerichtet ist directed. Die Summe der Einträge für Zeile B ist 2, d.h. 2 Kanten gehen vom Knoten B. Der Rest der Einträge wird ähnlich erklärt.

Graph-Operationen

Eine Datenstruktur, z. B. ein Graph, besteht aus einer Menge von Datenwerten oder einer Menge von Objekten plus der Beziehung zwischen den Objekten plus den Operationen (Funktionen) zwischen den Objekten. Die Beziehungen in einem Graphen werden durch die Kanten angezeigt. Darüber hinaus sollte ein Graph mindestens die folgenden Operationen haben:

angrenzend(G, x, y)

G bedeutet Graph. Diese Operation überprüft, ob eine Kante Knoten x und Knoten y verbindet connect. Wert und Position eines Eintrags in einer Matrix geben den Anschluss einer Kante (und ihren Typ) an.

Nachbarn(G, x)

Diese Operation gibt eine Liste aller Scheitelpunkte zurück, die direkt mit dem Scheitelpunkt x . verbunden sind. Wert und Position eines Eintrags in einer Matrix geben den Anschluss einer Kante an.

remove_vertex(G, x)

Diese Operation entfernt einen Scheitelpunkt x aus einem Graphen. Wenn der Scheitel keine Kante hätte, gibt es kein Problem. Wenn der Scheitel jedoch Links hatte, sollten auch die Links (Kanten) entfernt werden. Der Wert und die Position eines Eintrags in einer Matrix zeigen das Vorhandensein eines bestimmten Scheitelpunkts an. Wird ein Scheitelpunkt entfernt, muss die Matrix neu angepasst werden.

add_vertex(G, x)

Dies fügt einen Scheitelpunkt x hinzu, ohne Kanten hinzuzufügen, oder ersetzt einen Scheitelpunkt, der Kanten hatte, aber entfernt wurde. Der Wert und die Position eines Eintrags in einer Matrix zeigen das Vorhandensein eines bestimmten Scheitelpunkts an. Wird ein Scheitelpunkt hinzugefügt, muss die Matrix neu angepasst werden.

add_edge(G, x, y)

Diese Operation fügt eine neue Kante zwischen dem Scheitelpunkt x und dem Scheitelpunkt y hinzu, wenn die Kante nicht dort war. Der Wert und die Position eines Eintrags in einer Matrix zeigen das Vorhandensein einer bestimmten Kante an. Wird eine Kante hinzugefügt, muss die Matrix neu angepasst werden.

remove_edge(G, x, y)

Diese Operation würde die Kante zwischen dem Scheitelpunkt x und dem Scheitelpunkt y entfernen, wenn die Kante dort wäre. Der Wert und die Position eines Eintrags in einer Matrix zeigen das Vorhandensein einer bestimmten Kante an. Wird eine Kante entfernt, muss die Matrix neu justiert werden.

get_vertex_value(G, x)

Diese Operation gibt den mit dem Scheitelpunkt verknüpften Wert v zurück, x. Um dies zu erreichen, benötigen Sie einen Potenzsatz von Teilmengen für Scheitelpunktbeschriftungen und ihre Werte.

set_vertex_value(G, x, v)

Diese Operation gibt einen neuen Wert v für den mit dem Scheitelpunkt verknüpften Wert x. Um dies zu erreichen, benötigen Sie einen Potenzsatz von Teilmengen für Scheitelpunktbeschriftungen und deren Werte.

Einige Graphen verknüpfen auch Werte mit ihren Kanten. Solche Graphen benötigen die folgenden zusätzlichen Operationen:

get_edge_value(G, x, y)

Diese Operation gibt den der Kante zugeordneten Wert v (x, y) zurück. Um dies zu erreichen, benötigen Sie eine Potenzmenge von Teilmengen für Kanten und deren Werte.

set_edge_value(G, x, y, v)

Diese Operation gibt einen neuen Wert v für den mit der Kante verknüpften Wert (x, y). Um dies zu erreichen, benötigen Sie eine Potenzmenge von Teilmengen für Kanten und deren Werte.

Fazit

Ein Graph ist eine Menge von Knoten, die mit Kanten verbunden sind. Ein Graph kann ungerichtet oder gerichtet sein. Die Kanten können ungerichtet oder gerichtet sein. Schleifen können in einem Diagramm vorhanden sein oder fehlen. Was Sie als nächstes lernen sollten, sind Sets, Powersets und Multisets in Bezug auf Grafiken. Danach sollten Sie die verschiedenen Arten von Diagrammen lernen, z. B. orientiertes Diagramm, reguläres Diagramm, vollständiges Diagramm, zweiteiliges Diagramm, Turnierdiagramm, Flussnetzwerkdiagramm usw.

Chrys

Über den Autor

Chrysanthus Forcha

Entdecker der Mathematik Integration von First Principles und verwandten Serien. Master-Abschluss in Technischer Bildung, Spezialisierung auf Elektronik und Computersoftware. BSc Elektronik. Ich habe auch Kenntnisse und Erfahrungen auf Master-Niveau in Informatik und Telekommunikation. Von 20.000 Autoren war ich der 37. beste Autor bei devarticles.com. Ich arbeite in diesen Bereichen seit mehr als 10 Jahren.

Alle Beiträge anzeigen
Mittlere Maustaste funktioniert nicht unter Windows 10
Das mittlere Maustaste hilft Ihnen beim Scrollen durch lange Webseiten und Bildschirme mit vielen Daten. Wenn das aufhört, werden Sie am Ende die Tast...
So ändern Sie die linke und rechte Maustaste auf einem Windows 10-PC
Es ist ganz normal, dass alle Computer-Maus-Geräte ergonomisch für Rechtshänder gestaltet sind. Es gibt aber auch Mausgeräte, die speziell für Linkshä...
Emulieren Sie Mausklicks, indem Sie den Mauszeiger mit der klicklosen Maus in Windows 10 bewegen
Die Verwendung einer Maus oder Tastatur in der falschen Haltung bei übermäßiger Nutzung kann zu vielen gesundheitlichen Problemen führen, einschließli...