2014-12-08 17 views
6

kullanarak nasıl uygulanır? Sorum şu: Dijkstra'nın algoritmasını Cypher kullanarak uygulamak mümkün mü? REST API hakkında Neo4j web sitesinde açıklama sadece konuşur ve onuDijkstra'nın algoritması Neo4j'de Cypher

iki düğüm arasındaki en kısa mesafeye ile en kısa yolu bulmak istiyorum lütfen unutmayın benim gibi bir acemi için anlamak çok zordur ve değil İki düğüm arasındaki en kısa yol (en az sayıda ilişki içerir). Cypher kullanarak uygulamak çok kolay olan en kısa yol algoritmasının farkındayım, ancak amacım hizmet etmiyor.

Düğümlü bir grafik veritabanım varsa ve 'mesafe' özelliğine sahip düğümler arasındaki ilişkilerim varsa nasıl devam edeceğime lütfen beni yönlendirin. Tek istediğim, veritabanındaki iki düğüm arasındaki en kısa mesafeyi bulabileceğimiz bir kod yazmak. Ya da benim yaklaşımımı değiştirmek ve bunun için başka bir program kullanmam gerekiyorsa, herhangi bir ipucu?

MATCH (from: Location {LocationName:"x"}), (to: Location {LocationName:"y"}) , 
paths = allShortestPaths((from)-[:CONNECTED_TO*]->(to)) 
WITH REDUCE(dist = 0, rel in rels(paths) | dist + rel.distance) AS distance, paths 
RETURN paths, distance 
ORDER BY distance 
LIMIT 1 
: Bu durumda siz, allShortestPaths uygulamak ilişkilerin sizin mesafesi özelliğine dayalı bir artan düzende yolları sipariş ederken ve son mesaja dayalı tek dönmek böyle bir şey olurdu olabilir yılında
+0

bununla ilgili bir [yeni soru] (http://stackoverflow.com/questions/27346686/implementing-dijkstras-algorithm-in-neo4j) var, belki yardımcı olur. – zaboco

+0

Evet, bu soruyu sordum, aldığım cevap en kısa yolu (en az sayıda ilişki) ve düğümler arasındaki mesafelerin toplamını elde edebilmem için doğruydu .... ama aradığım şey en kısa yol (en az 'mesafe') – Shazu

+0

Buradaki "mesafe" nin ne anlama geldiğini açıklığa kavuşturmak için başka bir soru sormak zorundayım? İki düğüm arasında bir ilişki "hop" üzerinden mesafeyi temsil eden ilişkinizde bazı öznitelikleri var mı? – FrobberOfBits

cevap

5

+0

teşekkürler denilen bir özelliği vardır! kodunuzu düzenleyebilirsiniz: dördüncü satırdaki yol yerine yollar ve beşinci satırda p yerine yollar, böylece gelecekte bunu gören başkaları varsa, bunlar kafanız karışmaz. – Shazu

+0

evet emin, üzgünüm, yerelde bazı testlerle karıştırılmış :) –

+1

Neo4j'deki dijkstra uygulaması, bir sunucu uzantısının veya REST API'sının bir parçası olarak da kullanılabilir: http://neo4j.com/docs/stable/ rest-api-graph-algos.html # rest-api-execute-a-dijkstra-algoritma-eşit-ağırlıklar-on-ilişkiler- –

0

Hayır, işlemleri kullanmazsanız ve genel olarak algoritmi yeniden yazmadığınız sürece, makul bir şekilde mümkün değildir. Önceki yanıt yanlıştır, ancak daha az pahalı olan yollar allShortestPaths alt kümesi tarafından döndürülemez. İlişki maliyetini hesaba katmadan seçilen yolların bir alt kümesini filtreleyeceksiniz.