มีห้องสมุดสำหรับคำนวณเส้นทางที่สั้นที่สุดบนกราฟดังกล่าว พวกเขาทำเช่นนี้ได้อย่างไร โดยเฉพาะพวกเขาจะโหลดส่วนที่ต้องการของกราฟเพื่อเรียกใช้อัลกอริทึมของ Dijkstra ได้อย่างไร
คุณสามารถใช้ DB ซึ่งเป็นรูปแบบไฟล์ที่กำหนดเองเพื่ออ่านจากแผ่นดิสก์และการตั้งค่าในหน่วยความจำ
แต่จากประสบการณ์ของฉันในการใช้ฐานข้อมูลนั้นช้าลงประมาณ 5 ถึง 10 เท่าและหน่วยความจำที่มากขึ้นกว่าการเขียนรูปแบบไฟล์ของคุณเองโดยใช้รูปแบบรายการที่ลิงก์แบบ 'เรียบง่าย'
สิ่งที่ดีคือมีกรอบซอฟต์แวร์หลายใช้ OSM ซึ่งเป็นแหล่งที่มาเปิดเพื่อให้คุณสามารถมองขวาเป็นรหัสเช่นดูที่นี่ ในเครื่องมือกำหนดเส้นทางโอเพนซอร์ส GraphHopperมันง่ายมากที่จะเปลี่ยนจากการตั้งค่าการแมปหน่วยความจำ (ตามดิสก์) เป็นการตั้งค่าในหน่วยความจำ - โดยใช้รูปแบบเดียวกัน การตั้งค่า "mmap" ช่วยให้สามารถใช้งานบนอุปกรณ์พกพาที่ จำกัด หน่วยความจำและอุปกรณ์รุ่นหลังจะทำงานได้เร็วขึ้นมากหากคุณมี RAM ที่จำเป็นเช่นบนเซิร์ฟเวอร์ เช่นสำหรับกราฟทั่วโลก (> โหนด 100mio) จากนั้นคุณต้องมี RAM 8-10gb และเพิ่ม RAM อีกมากถ้าคุณต้องการเร่งความเร็วทุกอย่างเพิ่มเติมเช่นกับ Contraction Hierarchies - ประมาณ 5-8gb สำหรับรถทุกคันที่คุณต้องการ
รูปแบบนั้นง่ายมากและเก็บเฉพาะข้อมูลที่คุณต้องการด้วยเทคนิคเล็กน้อยเพื่อให้กะทัดรัด อ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ที่นี่ ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้เขียน GraphHopper
เกี่ยวกับคำตอบอื่น ๆ :
อัลกอริทึม Dijkstras ในขณะที่ใช้ถือว่าไม่เหมาะสมสำหรับปัญหานี้
'ปกติ' Dijkstra สามารถทำงานได้อย่างสมเหตุสมผล (<1s สำหรับการสืบค้นทั่วประเทศเช่นตัวอย่างโหนด 3 mio ของคุณ) และเหมาะสมที่สุดใน 'การรับรู้ทางทฤษฎี' แต่ต้องการการปรับแต่งเล็กน้อยเพื่อให้รวดเร็วในสถานการณ์การผลิต และเทคนิคเช่น Contraction Hierachies ใช้การปรับเปลี่ยนแบบสองทิศทางและทำงานได้ดีมาก
เครือข่ายถนนเป็นลำดับชั้นและภาพถ่าย
เครือข่ายถนนเป็นลำดับชั้นสำหรับรถยนต์เท่านั้นและไม่ใช่ภาพถ่าย (สะพาน, อุโมงค์, ... )