Programmierung von Navi-Programmen

  • Allgemein

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von wolfi_bayern.

    Programmierung von Navi-Programmen

    Liebe Leute,
    Welches sind die Prinzipien, nach denen Navi-Programme gebaut sind. (keine Software-Geheimnisse ausplaudern :) )
    Ich meine die Suchalgorithmen, nicht die Positionsbestimmung (wäre ein neues Thema)
    Klar ist, das die Geodaten der Kreuzungen und Straßen vorliegen müssen.
    Es geht sicher nicht nur mit Breiten- oder Tiefensuche in einem Graphen, das würde zu lange dauern.
    Was ich selber programmiert habe, sind einige Suchalgorithmen des Traveling Salesman Problems.
    Werden Petri-Netze in der Datenstruktur verwendet? (Habe ich im Studium nie ganz verstanden)

    Es grüsst euch einer, der nicht gut programmieren kann, aber immer sich immer wieder faszinieren lässt.
    naja, das StrassenNetz wird sicherlich als Graph mit gewichteten Kanten modelliert sein.
    Und für gerichtete Suche im Graphen (Start->Ziel) gibts glaub paar Standard-Algos, mir selbst ist nur der A*-Algo bekannt.
    Auf CodeProject fund ich mal einen ganz interessanten Artikel dazu.
    Aber ist lange her, bei mir ist nur "A*" hängengeblieben, und dass es davon mehrere Varianten gab, oder sogar auch weitere Algos, neben dem A*.
    Man baut sich, wie schon erwähnt, einen gewichteten Graphen, der das Netz repräsentiert. Mit dem Dijkstra-Algorithmus bekommt man dann einen Spannbaum des Graphen und den kürzesten Weg von einem Startknoten zu den anderen.
    Tiefen- und Breitensuche ermitteln lediglich Spannbäume der Komponenten (jedoch keine kürzesten Pfade), haben aber im Worst Case eines dichten Graphens auch, wie Dijkstra, quadratische Laufzeit.

    Da im Zweifelsfall aber in einem echten Straßennetz sehr viele Knoten und Kanten benötigt werden, bedient man sich da noch einiger Tricks, wie zum Beispiel verschiedene Straßenebenen (Autobahnnetz z. B. und beim Verlassen dann ein Netz für die Landstraßen usw.), um Knoten einzusparen. Weil wenn Du auf der Autobahn bist, brauchst Du sicherlich nicht die detaillierten Straßen der Städte. Wie genau das allerdings alles gemacht wird, weiß ich auch nicht.
    Geht aber bestimmt über irgendwelche Kantenflags, um Übergänge zu bestimmen.

    Unter lineare Laufzeit kommt man logischerweise aber nicht und im Durchschnitt bleibt man wohl auch quadratisch.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ ()