Bu tür grafiklerde en kısa yolları hesaplamak için kullanılabilir kütüphaneler vardır. Bunu nasıl yapıyorlar? Daha spesifik olarak, Dijkstra'nın algoritmasını çalıştırmak için grafiğin gerekli kısmını nasıl yüklerler?
Bir DB, diskten okunacak özel bir dosya biçimi ve bir bellek içi ayarı kullanabilirsiniz.
Ancak bir DB kullanma deneyimim, 'basit' bağlantılı liste biçimine dayalı olarak kendi dosya biçiminizi yazmaktan kabaca 5 ila 10 kat daha yavaş ve çok daha fazla bellek yoğun.
İyi bir şey, açık kaynak kodlu OSM kullanan çeşitli yazılım çerçeveleri vardır, böylece koda doğrudan bakabilirsiniz, örneğin buraya bakın . In GraphHopper açık kaynak yönlendirme motoru bir bellekten anahtara çok kolaydır bellek ayarına ayarı (tabanlı disk) eşlenen - her ikisi de aynı biçimi kullanarak. "Mmap" ayarı, bellek kısıtlamalı mobil cihazlarda kullanıma bile izin verir ve ikincisi, örneğin sunucuda gerekli RAM'e sahipseniz çok daha hızlı performans gösterir. Örneğin, dünya çapında bir grafik (> 100mio düğüm) için, 8-10gb RAM'e ve ayrıca her şeyi daha da hızlandırmak istiyorsanız, örneğin Kasılma Hiyerarşileri ile - istediğiniz her araç için yaklaşık 5-8gb daha fazla RAM'e ihtiyacınız var.
Biçim çok basittir ve temelde yalnızca ihtiyacınız olan verileri kompakt hale getirmek için birkaç püf noktası ile saklar. Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz . Feragatname: GraphHopper'in yazarıyım.
Diğer cevaplarla ilgili olarak:
Dijkstras algoritması uygulanabilir durumdayken bu sorun için uygun değildir.
'Normal' Dijkstra çok makul performans gösterebilir (3mio düğüm örneğiniz gibi ülke çapındaki sorgular için <1'ler) ve 'teori anlamında' optimaldir ancak üretim senaryolarında hızlı olmak için biraz ayarlamaya ihtiyaç duyar. Kasılma Hiyerarşileri gibi teknikler, bunun çift yönlü bir modifikasyonunu kullanır ve çok iyi performans gösterir.
yol ağları hiyerarşik ve düzlemseldir.
yol ağları sadece araba için hiyerarşiktir ve düzlemsel değildir (köprüler, tüneller, ...)