2016-08-13 6 views
0

Ich bin ein Anfänger, der versucht, den A * Suchalgorithmus für die Praxis zu implementieren, und ich frage mich, was der beste Weg ist, darüber zu gehen. Ich habe eine Graphenstruktur (Adjazenzmatrix) erstellt und mein Plan war, das A * auf einen Anfangs- und Zielknoten anzuwenden. Ich erschaffe auch die Heuristik und verbessere sie, während ich weitergehe. Die Frage ist, kann das überhaupt funktionieren? Ich habe mir andere Implementierungen angeschaut und sie haben es mit verschiedenen Datenstrukturen gemacht.Implementierung eines Suchalgorithmus

+0

Also, was ist die Frage? Wird Ihre Implementierung funktionieren? – enkryptor

Antwort

0

Das hängt davon ab, wie Sie die Adjazenzmatrix implementiert haben.

Ein kritischer Punkt von A * ist das Finden der Nachbarn eines Knotens. Wenn Sie die Matrix als einfaches dichtes Bitfeld implementieren, bei dem Sie eine 1 für benachbarte Knoten und eine 0 für nicht benachbarte Knoten haben, ist diese Suche ziemlich ineffizient, da Sie jeden Knoten überprüfen müssen. Obwohl dies ineffizient ist, hindert Sie das nicht daran, A * zu implementieren.

Wenn Sie eine kompliziertere Implementierung der Adjazenzmatrix haben, z. als spärliche Matrix, mit der Sie die Nachbarn direkt abfragen können, ist dies besser für A * geeignet.

+0

Ja, ich habe es als spärliche Matrix implementiert (sorry, ich kannte den genauen Namen dafür nicht). Wäre dies dennoch eine ineffiziente Datenstruktur im Vergleich zu Alternativen? – noobatrilla

+0

Ich definiere die dünn besetzte Matrix als Doppelgraphen [] [], wie würde ich die Nachbarn direkt abfragen? – noobatrilla

+0

Dies ist keine Sparse-Matrix-Implementierung. Es ist eine dünn besetzte Matrix, die in einer dichten Matrixdarstellung gespeichert ist. Siehe z.B. http://www.netlib.org/utk/people/JackDongarra/etemplates/node373.html. Mit dieser Darstellung sind alle Nachbarn direkt nebeneinander. –