Hi
Ich habe diesmal eine wirklich echt schwierige Frage. Es geht darum, in welchem Stil man am besten eine Graphen-A*-Suche programmiert.
Es geht hierum:
http://wwwiti.cs.uni-magdeburg.de/iti_db/algoj/code/algoj/kap16/Graph.java ... definiert eine Graph-Klasse mit einer Edge- und Node-Klasse
http://wwwiti.cs.uni-magdeburg.de/iti_db/algoj/code/algoj/kap16/AStarSearch.java ... definiert die Klasse für die A*-Suche
Irgendwie finde ich das gut, dass man der A*-Klasse einen kompletten Graphen übergibt. Damit kann man den Graphen für unterschiedlichste Zwecke verwenden.
Allerdings sind meiner Meinung nach damit folgende Unannehmlichkeiten verbunden:
- addNode muss ein node-Objekt zurückgeben
- die Node-Klasse benötigt eine Methode setCost zur Definition der h-Kosten
- die Graph-Klasse muss eine getNode-Methode zur Verfügung stellen
setCost benötigt man - soviel ich weiß - jedoch ausschließlich nur für A*-Suchen.
Eine andere Möglichkeit wäre, keine eigene AStarSearch-Klasse zu programmieren, sondern alles in der Graph-Klasse unterzubringen. Damit ergibt sich:
- addNode muss kein node-Objekt zurückgaben
- die Node-Klasse benötigt keine Methode setCost, die h-Kosten werden gleich bei addNode mit übergeben
- in der Graph-Klasse muss es keine getNode-Methode geben
Der Nachteil dieser Variante ist, dass man Graph-Instanzen nicht irgendwelchen Such-Klassen übergeben kann. Die Graph-Klasse bietet nur jene Möglichkeiten, die man in der Klasse programmiert hat.
In welchem Stil würdet ihr so etwas programmieren?
Ich habe diesmal eine wirklich echt schwierige Frage. Es geht darum, in welchem Stil man am besten eine Graphen-A*-Suche programmiert.
Es geht hierum:
http://wwwiti.cs.uni-magdeburg.de/iti_db/algoj/code/algoj/kap16/Graph.java ... definiert eine Graph-Klasse mit einer Edge- und Node-Klasse
http://wwwiti.cs.uni-magdeburg.de/iti_db/algoj/code/algoj/kap16/AStarSearch.java ... definiert die Klasse für die A*-Suche
Irgendwie finde ich das gut, dass man der A*-Klasse einen kompletten Graphen übergibt. Damit kann man den Graphen für unterschiedlichste Zwecke verwenden.
Allerdings sind meiner Meinung nach damit folgende Unannehmlichkeiten verbunden:
- addNode muss ein node-Objekt zurückgeben
- die Node-Klasse benötigt eine Methode setCost zur Definition der h-Kosten
- die Graph-Klasse muss eine getNode-Methode zur Verfügung stellen
setCost benötigt man - soviel ich weiß - jedoch ausschließlich nur für A*-Suchen.
Eine andere Möglichkeit wäre, keine eigene AStarSearch-Klasse zu programmieren, sondern alles in der Graph-Klasse unterzubringen. Damit ergibt sich:
- addNode muss kein node-Objekt zurückgaben
- die Node-Klasse benötigt keine Methode setCost, die h-Kosten werden gleich bei addNode mit übergeben
- in der Graph-Klasse muss es keine getNode-Methode geben
Der Nachteil dieser Variante ist, dass man Graph-Instanzen nicht irgendwelchen Such-Klassen übergeben kann. Die Graph-Klasse bietet nur jene Möglichkeiten, die man in der Klasse programmiert hat.
In welchem Stil würdet ihr so etwas programmieren?