Tacir məsələsinin Neo4j ilə həlli

Məqalə tacir məsələsini həll üsuluna yeni baxış gətirilməsi mahiyyəti daşımır. Sadəcə Graph Database olan Neo4j-nin özəlliklərini göstərmək mahiyyətini daşıyır.

Tacir məsələsinə  zəiflədilmiş şərtlərlə qoyuluşuna baxaq. Verilmiş şəhərlər və onlar arasındakı məsafəyə görə hər hansı bir şəhərdən başlayıb hər bir şəhərdə yalnız bir dəfə olmaqla başlanğıc şəhərə qayıdan ən kiçik uzunluqlu marşrutun tapılması məsələsi tacir məsələsi adlanır.

 43093_300

Fərz edək ki, Tacir 4 şəhərin hər birində bir dəfə olmaqla başlanğıc şəhərə qayıtmalıdır. Şəhərlər arasındakı məsafələr verilir. Məsələ minimal marşrutu tapmaqdan ibarətdir.

 

A

B

C

D

A

0

3

6

5

B

3

0

4

2

C

6

4

0

3

D

5

2

3

0

 

Neo4j-də əsas elementlər qovşaqlar (node), tillərdir (relationship). Həm node, həm relationship-lərin propertiesləri ola bilir.
P.S. Neo4j haqqında növbəti məqalərlə ətraflı danışılacaq.

CYPHER


create (a:yol {id:”A”}),(b:yol {id:”B”}),(c:yol {id:”C”}),(d:yol {id:”D”})
create (a)-[:mesafe {mesafe:3}]->(b) // şəhərlər arasındakı məsafələrin təyini

create (a)-[:mesafe {mesafe:6}]->(c) 
create (a)-[:mesafe {mesafe:5}]->(d) 
create (b)-[:mesafe {mesafe:4}]->(c) 
create (b)-[:mesafe {mesafe:2}]->(d) 
create (c)-[:mesafe {mesafe:3}]->(d)

 

2122

 

Added 4 labels, created 4 nodes, set 10 properties, created 6 relationships, returned 0 rows in 78 ms

Şəhərlər arasında tilləri biristiqamətli təsvir etdik. Ancaq məsələnin təsvirində hər iki istiqamətdə yollar təyin edilib. Neo4j-də bu imkan vardır. Lakin biz Cypher dilinin köməyi ilə hər iki istiqamət üzrə axtarışı həyata keçirəcəyik.

 

CYPHER

match (a:yol {id:”A”})<-[x1:mesafe]->(b)<-[x2:mesafe]->(c)<-[x3:mesafe]->(d)<-[x4:mesafe]->(f:yol {id:”A”}) return a.id+’->’+b.id+’->’+c.id+’->’+d.id+’->’+f.id as `marşrut`,x1.mesafe+x2.mesafe+x3.mesafe+x4.mesafe as `mesafe` order by `mesafe`

 

211212121

Nəticədə ən qısa marşrutları tapdıq.

Görüşənədək.

 

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Leave a Reply