{"id":4576,"date":"2019-12-02T09:35:53","date_gmt":"2019-12-02T08:35:53","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=4576"},"modified":"2019-12-02T10:45:43","modified_gmt":"2019-12-02T09:45:43","slug":"c-guns-graph-dijkstra-beschleunigungstechniken","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=4576","title":{"rendered":"C++ Guns - Graph - Dijkstra Beschleunigungstechniken"},"content":{"rendered":"<p>Dijkstra - Single source shortest paths<\/p>\n<p>Testgebeit DGM triangulation Rheinausschnitt mit 2.7 Millionen Punkte und 8.1 Millionen Kanten. Das Gebiet ist in Nord S\u00fcd Richtung lang gestreckt und in Ost West Richtung schmal. Es soll ein k\u00fcrzester Path von einem Startpunkt auf der Ostrand hin zur Westrand gefunden werden. Der \u00fcberwiegende Teil des Gebiets muss im Vergleich zur Luftlinie dabei nicht durchlaufen werden.<\/p>\n<p>Standard Dijkstra<br \/>\nDie Standard Variante von Dijkstra berechnet vom Startknoten zu jedem anderen Knoten im Mesh den k\u00fcrzesten Path.<\/p>\n<p>Beschleunigungstechnik Early Termination<br \/>\nSobald der Zielknoten als finish markiert wird, beendet der Algorithmus. Muss vom Start zum Ziel, wie in diesem Beispiel, nicht das komplette Gebiet durchlaufen werden, ergibt diese Technik eine Beschleunigung.<\/p>\n<p>Beschleunigungstechnik Bidirectional Search<br \/>\nEs kann eine zweite Suche vom Zielknoten hin zum Startknoten auf dem transponierten Graph gestartet werden. Die beiden Dijkstra Instanzen werden nicht parallel, sondern abwechseln angesto\u00dfen und iterieren je ein mal. Sobald ein Knoten von einer Suchinstanz als finish markiert wird, welche in der anderen Suchinstanz schon als finish markiert worden ist, terminiert der Algorithmus.<br \/>\nDer ausgegebene Path muss nicht zwangsl\u00e4ufig der k\u00fcrzeste Path von s nach t sein. Es ist m\u00f6glich, dass es einen k\u00fcrzeren Path \u00fcber eine Kante gibt, welche in beiden Suchinstanzen auf gesehene, aber noch nicht finished Knoten zeigt. <\/p>\n<p>Laufzeiten: GCC 8.2 -O2 -funroll-loops  AMD FX-8350 Eight-Core Processor 4 GHz<br \/>\nStandard Dijkstra 2.79 sec<br \/>\nEarly Termination 1.19 sec speedup 2.3<br \/>\nBidirectional Search 0.925 sec speedup 3.0<\/p>\n<p><a href=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2019\/12\/rheinmodellumgriff3.jpg\" rel=\"attachment wp-att-4588\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2019\/12\/rheinmodellumgriff3-150x150.jpg\" alt=\"rheinmodellumgriff3\" width=\"150\" height=\"150\" class=\"alignnone size-thumbnail wp-image-4588\" \/><\/a><\/p>\n<div id=\"attachment_4589\" style=\"width: 160px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2019\/12\/rheinmodellumgriff2.jpg\" rel=\"attachment wp-att-4589\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4589\" src=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2019\/12\/rheinmodellumgriff2-150x150.jpg\" alt=\"Created with GIMP\" width=\"150\" height=\"150\" class=\"size-thumbnail wp-image-4589\" \/><\/a><p id=\"caption-attachment-4589\" class=\"wp-caption-text\">Created with GIMP<\/p><\/div>\n<div id=\"attachment_4590\" style=\"width: 160px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2019\/12\/rheinmodellumgriff.jpg\" rel=\"attachment wp-att-4590\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4590\" src=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2019\/12\/rheinmodellumgriff-150x150.jpg\" alt=\"Created with GIMP\" width=\"150\" height=\"150\" class=\"size-thumbnail wp-image-4590\" \/><\/a><p id=\"caption-attachment-4590\" class=\"wp-caption-text\">Created with GIMP<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Dijkstra - Single source shortest paths Testgebeit DGM triangulation Rheinausschnitt mit 2.7 Millionen Punkte und 8.1 Millionen Kanten. Das Gebiet ist in Nord S\u00fcd Richtung lang gestreckt und in Ost West Richtung schmal. Es soll ein k\u00fcrzester Path von einem Startpunkt auf der Ostrand hin zur Westrand gefunden werden. Der \u00fcberwiegende Teil des Gebiets muss [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-4576","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4576"}],"version-history":[{"count":8,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4576\/revisions"}],"predecessor-version":[{"id":4592,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4576\/revisions\/4592"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4576"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}