2013-04-12 9 views
12

Qual è il modo migliore per rilevare i cicli in un grafico di dimensioni considerevoli utilizzando Cypher.Rilevamento dei cicli nel grafico delle proprietà neo4j utilizzando la cifratura

Ho un grafico che ha circa 250000 nodi e circa 270000 relazioni e vorrei rilevare cicli nel sotto grafico di circa 10 nodi nodi e che coinvolgono 100k relazioni. Il codice che ho scritto è come

start 
     n = node:node_auto_index(some lucene query that returns about 10k nodes) 

match 
    p = n-[:r1|r2|r3*]->n 
return p 

Tuttavia, questo non risulta essere molto efficiente.

Qualcuno può suggerire un modo migliore per farlo.

risposta

0

1) Contare i nodi non-battente bandiera
2) nodi Bandiera senza relazioni in uscita (foglie)
3) nodi Bandiera senza relazioni in entrata (radici)
4) Se tutti i nodi sono stati contrassegnati in 2 o 3 tornare al punto 1

5) Se i nodi un battenti bandiera rimane hai almeno 1 ciclo

il ciclo (s) sarà nel set di nodi non-battente bandiera
guardando nodi con minor numero [in | out] i bordi possono aiutare
se ce ne sono ancora troppi per identificare il ciclo

Problemi correlati