topologische Sortierung

pramort

Mitglied
Hallo zusammen,

ich würde mich sehr freuen, wenn mir jemand mit dem folgenden Problem helfen könnte..
Ich versuche gerade, einen Algorithmus umzusetzen, der eine topologische Sortierung eines Graphen ausgibt. Als erstes will ich Eingangsgrade der Knoten berechnen. Überall wird angegeben, dass dies in linearer Zeit möglich ist. Ich habe eine Vermutung, dass die Laufzeit meiner Version quadratisch ist.. Könnte mir jemand bitte sagen, ob das tatsächlich so ist?

Java:
//adjLists[u][j] is the j-th neighbor of vertex u in G
for(int i = 0; i < adjLists.length; i++) {
   //outdegrees[u] is the out-degree of vertex u in G
   for(int j = 0; j < outdegrees[i]; j++) {
      indegrees[adjLists[i][j]] = indegrees[adjLists[i][j]] + 1;
   }
}

Danke für eure Hilfe!
 

mrBrown

Super-Moderator
Mitarbeiter
Überall wird angegeben, dass dies in linearer Zeit möglich ist.
Linear zu was? ;)

Wenn ich dein Code-Stück richtig interpretiere, läuft die äußere Schleife über alle Knoten und die innere über alle ausgehenden Kanten dieses Knotens - insgesamt also über alle Kanten genau einmal -> ist also linear zur Kantenzahl, aber nicht linear zur Knotenzahl.

EDIT: Kantenzahl zu Knotenzahl geändert -.-
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Ich will auf jeden Fall was wissen: was Adajzenzmatrix oder Kantenliste beim ermitteln des Eingangsgrades schneller macht, als Adjazenzliste.

Und bitte nicht nur Inhaltsleere Floskeln.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Du schaffst es wohl wirklich nicht, auf eine ganz einfache Frage zu antworten. Wohl typischer Fall von völlig Ahnungslos...
 

pramort

Mitglied
Hallo liebe Leute!
Ich war über ein paar Tage weg und kann mich leider erst jetzt für eure Hinweise bedanken!

Mein Problem ist einfach, dass ich versuche, topologische Sortierung in Zeit O(|V|+|E|) umzusetzen. Dabei versuche ich als Erstes Eingangsgrade der Knoten zu berechnen. Verstehe ich es richtig, dass wenn der o.g. Code-Teil in quadratischer Laufzeit läuft, dann komme ich ja nicht auf lineare Zeit (|V|+|E|) des gesamten Algorithmus? In meinem Skript steht, dass es möglich ist, Eingangsgrade in Zeit |E| zu berechnen (die Schleife in Schritt 3). Die Schleifen in den Schritten 2 und 4 haben eine Laufzeit O(|V|).


photo_2018-07-09_09-04-00.jpg
 
X

Xyz1

Gast

mrBrown

Super-Moderator
Mitarbeiter
Verstehe ich es richtig, dass wenn der o.g. Code-Teil in quadratischer Laufzeit läuft, dann komme ich ja nicht auf lineare Zeit (|V|+|E|) des gesamten Algorithmus?
Dein obiger Code läuft nicht in quadratischer Zeit, sondern linear.
Deine äußere Schleife läuft über alle Knoten.
Die innere läuft für jeden Knoten über dessen Kanten, also insgesamt über alle Kanten das Graphen.

Macht |V|+|E|.

Das Skript nutzt für die Kanten allerdings eine Kantenliste, hier muss man nur einmal über alle Kanten laufen - also |E|
 

mihe7

Top Contributor
Wenn ich mich auf die Schnelle nicht vertan habe, dürften die Zeitkomplexitäten im Skript wie folgt sein:

Zeile 1: O(1)
Zeile 2: O(|V|), bis dahin O(|V|)
Zeile 3: O(|E|), bis dahin O(|V| + |E|)
Zeilen 4-5: O(|V|), bis dahin O(|V| + |E|)
Zeile 6: O(1), bis dahin O(|V| +|E|)
Zeilen 7 bis 12 sind nicht ganz trivial: die beiden Schleifen erwecken den Anschein, als würde hier |V|*|E| gelten, das ist aber nicht der Fall, denn es werden für jeden Knoten nur die von ihm ausgehenden Kanten berücksichtigt. Am Ende werden also alle Knoten und Kanten des Graphen einmal durchlaufen: O(|V| + |E|)
Zeile 13: O(1), Gesamt: O(|V|+|E|)
 

pramort

Mitglied
Das Skript nutzt für die Kanten allerdings eine Kantenliste, hier muss man nur einmal über alle Kanten laufen - also |E|

Könntest du mir bitte kurz erklären, wie so eine Liste aufgebaut ist. Also, ich weiß, was eine Liste ist. Ich verstehe nur nicht, wie man mit einer Schleife alle Kanten durchlaufen kann. Z.B. habe ich ein Array und jedes Arrayelement ist eine Liste. So z.B. arr[0] - hier drin sind alle Kanten als Liste, die von diesem Knoten ausgehen. Wie könnte man diese Struktur mit nur einer Schleife durchlaufen? Danke nochmals für deine Hilfe!
 

mrBrown

Super-Moderator
Mitarbeiter
Könntest du mir bitte kurz erklären, wie so eine Liste aufgebaut ist. Also, ich weiß, was eine Liste ist. Ich verstehe nur nicht, wie man mit einer Schleife alle Kanten durchlaufen kann. Z.B. habe ich ein Array und jedes Arrayelement ist eine Liste. So z.B. arr[0] - hier drin sind alle Kanten als Liste, die von diesem Knoten ausgehen. Wie könnte man diese Struktur mit nur einer Schleife durchlaufen? Danke nochmals für deine Hilfe!
Das was du nutzt ist eine Ajazenzliste, zu jedem Knoten werden dabei alle ausgehende Kanten gespeichert.

So etwa :
1: 2,3
2: 3
3:
(1 hat Kante zu 2 und 3, 2 nur zu 3, 3 keine ausgehenden)

Bei einer Kantenliste speichert man nur alle Kanten:
(1,2),(1,3)(2,3)
(Kanten von 1 zu 2, von 1 zu 3, von 2 zu 3)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Topologische Sortierung Java Basics - Anfänger-Themen 1
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
U Sortierung in collections testen Java Basics - Anfänger-Themen 11
A Sortierung Java Basics - Anfänger-Themen 18
G Java Sortierung Java Basics - Anfänger-Themen 3
N Best Practice Ist die Sortierung richtig? Java Basics - Anfänger-Themen 3
S Sortierung Java Basics - Anfänger-Themen 4
K Sortierung eines int-Arrays von groß nach klein Java Basics - Anfänger-Themen 3
S Sortierung funktioniert nicht Java Basics - Anfänger-Themen 1
S Was ist schneller: direkte Sortierung oder indirekt ueber eine SortedMap..? Java Basics - Anfänger-Themen 10
F Collections Sortierung und Einfügen von Elementen Java Basics - Anfänger-Themen 1
L Lexikographische Sortierung eines Strings Java Basics - Anfänger-Themen 6
A Kleinste Ziffer im Array suchen um Sortierung zu erzeugen Java Basics - Anfänger-Themen 2
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
D Sortieren in Abhängigkeit von einer anderen Sortierung Java Basics - Anfänger-Themen 14
K Sortierung von Zahlen Java Basics - Anfänger-Themen 13
S Sortierung funktioniert nicht Java Basics - Anfänger-Themen 9
B Hiilfee! Step by Step sortierung eines Arrays... Java Basics - Anfänger-Themen 19
G Bubblesort - Falsche Sortierung Java Basics - Anfänger-Themen 6
T Datenstruktur für Sortierung Java Basics - Anfänger-Themen 4
S Collections Sortieren von 3 Collections nach "einer Sortierung" Java Basics - Anfänger-Themen 3
R Shellsort Sortierung Java Basics - Anfänger-Themen 5
K Sortierung von Anzahl der Wörtern in ArrayList Java Basics - Anfänger-Themen 4
U Alter Berechnung + sortierung Java Basics - Anfänger-Themen 6
H Sortierung eines String[][] mit Bedingung Java Basics - Anfänger-Themen 7
M Frage zur Sortierung Java Basics - Anfänger-Themen 8
S problem mit sortierung interface comperator Java Basics - Anfänger-Themen 11
B OOP Comparator - Sortierung "optisch" Darstellen Java Basics - Anfänger-Themen 17
F Treemap und Sortierung? Java Basics - Anfänger-Themen 2
L Random Sortierung Java Basics - Anfänger-Themen 9
A Sortierung (Gernerics & Liste) Java Basics - Anfänger-Themen 9
J Sortierung Java Basics - Anfänger-Themen 11
F compareTo - Sortierung nach 2 Argumenten Java Basics - Anfänger-Themen 10
? hilfe bei Fehlersuche Sortierung List Java Basics - Anfänger-Themen 5
O Sortierung Denkanstoss Java Basics - Anfänger-Themen 7
G ArrayList mit ArrayList als Inhalt - komische Sortierung? Java Basics - Anfänger-Themen 12
P Brauche Hilfe bei Sortierung eines JTrees ! Java Basics - Anfänger-Themen 14
K Kurze Frage zur Sortierung von Array-Inhalten Java Basics - Anfänger-Themen 5
G String Sortierung nach mehreren Kriterien Java Basics - Anfänger-Themen 4
G Sortierung eines Arrays nach mehreren Kriterien Java Basics - Anfänger-Themen 6
Q HashMap Sortierung Java Basics - Anfänger-Themen 11
S Sortierung Rückgängig machen?! Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben