FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

P3 Zettel 3 Aufgabe 2

P3 Zettel 3 Aufgabe 2 2003-11-20 22:26
skillz
Hallo Leute, ich brauche mal Hilfe.

Hier die Aufgabe (2)
http://vsis-www.informatik.uni-hamburg.de/teaching/ws-03.04/p3/a3.phtml

Wie soll man den Konstruktor des Graphen bauen?

Ich übergebe momentan einen Vector alleknoten.
Aber jeder Knoten soll ja seine direkten Nachfolgerknoten kennen. Soll man dem Konstruktor also auch noch einen Vector allekanten (Eine Kante kennt ihre beiden Knoten) übergeben?

Oder macht es mehr Sinn, im Konstruktor der Klasse Knoten die jeweiligen Kanten des Knotens zu übergeben?


Für Hilfe wäre ich sehr dankbar.

Re: P3 Zettel 3 Aufgabe 2 2003-11-20 22:31
bjoren
hi!
also eigentlich muss der konstruktor gar keinen parameter haben.
die knoten fügst du ja später durch die entsprechenden methoden hinzu. der graph muss diese halt alle verwalten, ebenso wie die kanten.
bj

Re: P3 Zettel 3 Aufgabe 2 2003-11-20 22:41
skillz
Okay, aber man kann sie ja übergeben falls man schon solche fertigen Listen hätte.

Was mich interessiert ist, ob ich mit zwei Adjazenzlisten (eine für Knoten, eine für Kanten) in der Klasse Graph auskomme.

Und ob Vertex wirklich nur einen Namen hat oder auch noch eine Adjazenzliste mit seinen Nachfolgerknoten.

Re: P3 Zettel 3 Aufgabe 2 2003-11-20 23:09
bjoren
also, an sich brauchst du je knoten eine liste, in der alle kantenrelationen des jeweiligen knotens drinstehen.
nach der aufgabenstellung hat der einzelne knoten keine infos über seine kanten. das wird alles in Graph verwaltet.
also hat ein knoten auch keine listen.

im Graph -so stehts ja vorgeschlagen- kannst du mittels eines hashtables die knoten(namen) als schlüssel zum zugriff auf die jeweilige adjazenzliste nehmen.


also, nach der aufgabenstellung ist es vielleicht nicht so sinnvoll, ganze listen an den Graph-Konstruktor zu übergeben., weil es ja gerade seine Organisationsaufgabe ist.
und wenn, müsstest du ja eigentlich nen ganzen hashtable übergeben.

Re: P3 Zettel 3 Aufgabe 2 2003-11-20 23:14
skillz
Ok danke erstmal!

Was die Hashtabelle macht muss ich mir erst noch erarbeiten.

Re: P3 Zettel 3 Aufgabe 2 2003-11-21 12:01
Gosi
Wie sieht das mit den Vertices aus?
In eine List oder Set.
Oder man nimmt nicht den namen als key in dem hashtable sonder gleich den ganzen Vertex. Dann könnte man doch mit keys() an die einzelnen rankommen. Das hat aber bestimmt einen Haken, oder???


Re: P3 Zettel 3 Aufgabe 2 2003-11-21 12:09
Gosi
Ich seh grade das das die sache nicht einfacher macht als mit den listen. contains() wird dadurch echt schlecht. da muss man dann alle durch gehen.

Re: P3 Zettel 3 Aufgabe 2 2003-11-26 19:12
dr.Gonzo
.
Oder man nimmt nicht den namen als key in dem hashtable sonder gleich den ganzen Vertex. Dann könnte man doch mit keys() an die einzelnen rankommen.

Ich denke mal dass es in der jetzigen Form des Programms ziemlich egal ist, ob jetzt nur die Namen der Vertices oder gleich die ganzen Objekte als Keys benutzt. Die Namen halten ja auch eine Referenz auf die Vertices, welchen sie zugeordnet sind. Vielleicht muesstest du dir noch eine zusaetzliche Methode bauen, aber mehr nicht. [img]http://unimatix.sternenvolk.de/gfx/25.gif[/img]

[EDIT] Mit "der jetzigen Form des Programms" meinte ich eigentlich die Aufgabenstellung.[/EDIT]

Re: P3 Zettel 3 Aufgabe 2 2003-11-27 09:08
Ksireau
Die Namen halten ja auch eine Referenz auf die Vertices, welchen sie zugeordnet sind. Vielleicht muesstest du dir noch eine zusaetzliche Methode bauen, aber mehr nicht.
Wie funktioniert das denn? Ich hab bislang auch immer die Vertices-Objekte als Key benutzt.

Und wofür genau musste man jetzt eigentlich die equals()-Methode überschreiben? Laut Dokumentation muss ein Key die Hashcode() und equals()-Methode implementieren. Wenn wir sie schon überschrieben haben in Vertex und Edge, wieso nehmen wir dann nicht auch gleich das ganze Objekt als Key?

Re: P3 Zettel 3 Aufgabe 2 2003-11-27 09:26
Slater
Die Namen halten ja auch eine Referenz auf die Vertices, welchen sie zugeordnet sind. Vielleicht muesstest du dir noch eine zusaetzliche Methode bauen, aber mehr nicht.
Wie funktioniert das denn? Ich hab bislang auch immer die Vertices-Objekte als Key benutzt.
alle Knoten anschauen, auf Gleichheit der Namen prüfen zum Beispiel
Und wofür genau musste man jetzt eigentlich die equals()-Methode überschreiben?
in welcher Klasse?
Laut Dokumentation muss ein Key die Hashcode() und equals()-Methode implementieren.
welche Doku?

meinst du die Klassenbeschreibung von HashTable?
da steht das das ganze nur funktioniert,
wenn der Key diese beiden Operationen anbietet,
ist klar das die benötigt werden,

du kannst also keinen int als key nehmen,
sondern nur Objekte!,
und zwar erfüllen alle Objekte diese Bedingung,
die hashcode() und equals() sinnvoll überschreiben
oder die Ursprungsversionen von Object verwenden,

Wenn wir sie schon überschrieben haben in Vertex und Edge, wieso nehmen wir dann nicht auch gleich das ganze Objekt als Key?
ist eine Möglichkeit, du kannst abe auch den Namen als String nehmen ;),
diese Klasse von Objekten bietet auch die benötigten Operationen

Re: P3 Zettel 3 Aufgabe 2 2003-11-29 01:18
Ksireau
Mir macht nur die Methode getAllVertices() Probleme wenn ich den Namen als Key benutze. Die Funktion soll ja sicher die Knoten-Objekte als Enumeration zurückgeben und nicht nur die Namen der einzelnen Knoten. Wie bekomme ich also aus dem Namen das Knoten-Exemplar?

Re: P3 Zettel 3 Aufgabe 2 2003-11-29 16:46
Slater
zaubern kann Java nicht, richtig,

du musst auf alle Knoten zugreifen können,
etwa in einem Vector gespeichert,

alle Knoten rausrücken:
Enumeration aus Vector zurückgeben

Knoten zu Name bestimmen:
alle Knoten durchlaufen, auf Namensgleichheit prüfen