2016-11-25 4 views

Antwort

0

Ich bin mir nicht sicher, ob die Chiffrierroutine das alleine kann, aber Sie könnten eine Programmiersprache verwenden und sich mit neo4j verbinden, um die Knoten und Beziehungen zu erstellen.
In PHP zum Beispiel:

function create_children($parent){ 

    print "\n$parent: "; 
    for ($i=0; $i<=7;$i++) { 
     $node_id = (int) "$parent"."$i"; 
     $children[] = $node_id; 
     print "$node_id,"; 
     // create children nodes 
     // CREATE (child:node) SET node_id = $node_id 
     //create relationship here 
     // MATCH (parent:node) where node_id = $parent 
     // CREATE (parent)-[r:parent_of]->(child) 
    } 
    return $children; 

} 


function create_tree ($root, $depth) { 
    if ($depth ==0) return; 
    else{ 
     $children = create_children($root); 
     $depth--; 
     foreach ($children as $child) { 
      create_tree($child, $depth); 
     } 
    } 
} 


// MAIN 

// CREATE (parent:node) SET node_id=0; 
create_tree(0,3); 

Natürlich, wo die Chiffre Anweisungen, die Sie auf Ihre Neo4j Instanz verbinden sind, müssen und diese Anweisungen ausführen.
Wenn Sie nicht sicher sind, wie zu tun, dass Sie nur die Chiffre Aussagen ausdrucken könnte und sie dann in eine neo-Shell einfügen oder Browser
hier ist der Ausgang des laufenden create_tree(0,2) Der Ausgang der Eltern durch seine acht Kinder folgten zeigt

0: 00,01,02,03,04,05,06,07, 
00: 00,01,02,03,04,05,06,07, 
01: 10,11,12,13,14,15,16,17, 
02: 20,21,22,23,24,25,26,27, 
03: 30,31,32,33,34,35,36,37, 
04: 40,41,42,43,44,45,46,47, 
05: 50,51,52,53,54,55,56,57, 
06: 60,61,62,63,64,65,66,67, 
07: 70,71,72,73,74,75,76,77, 

lassen Sie mich wissen, ob das, was Sie für

1

suchen Sie können Cypher verwenden, um einen Baum zu erzeugen, wenn man seine Höhe im Voraus mit. Der Einfachheit halber habe ich Binärbäume generiert (mit einem Verzweigungsfaktor von 2).

WITH 0 as root, range(1,2) AS branches 
WITH root as root, branches AS l1s, branches AS l2s 
UNWIND l1s AS l1 
UNWIND l2s AS l2 
MERGE (n0:TreeNode {name: root}) 
MERGE (n1:TreeNode {name: l1}) 
MERGE (n2:TreeNode {name: l1+"_"+l2}) 
MERGE (n0)-[:X]->(n1) 
MERGE (n1)-[:X]->(n2) 

Daraus ergibt sich der folgende Baum:

enter image description here

Erläuterung: für einen Baum von k Stufen, kopieren wir die branches Variablen k-1-mal, und jede Liste entspannen. Dies erzeugt ein kartesisches Produkt und erzeugt somit die Blattknoten. Für (vollständige) binäre Bäume von k-Niveaus führt dies zu 2^(k-1) Blattknoten. (Dies funktioniert auch für Octrees, die 8^(k-1) Ebenen haben.)

Wir kombinieren die Nummern der Ebenen mit Unterstrichen, um eindeutige Variablennamen für jede Ebene zu erstellen. Die IDs können als solche abgefragt werden:

WITH 0 as root, range(1,2) AS branches 
WITH root as root, branches AS l1s, branches AS l2s 
UNWIND l1s AS l1 
UNWIND l2s AS l2 
RETURN root, l1, l1+"_"+l2 

Daraus ergibt sich:

╒════╤═══╤═════════╕ 
│root│l1 │l1+"_"+l2│ 
╞════╪═══╪═════════╡ 
│0 │1 │1_1  │ 
├────┼───┼─────────┤ 
│0 │1 │1_2  │ 
├────┼───┼─────────┤ 
│0 │2 │2_1  │ 
├────┼───┼─────────┤ 
│0 │2 │2_2  │ 
└────┴───┴─────────┘ 

Jetzt müssen wir die Knoten und Beziehungen zu tun haben, ist zu erstellen, während Aufmerksamkeit, die Knoten/Kanten werden nur einmal erstellt . Dies wird durch Verwendung der MERGE sichergestellt. (MERGE scheinen mag zunächst schwierig, aber es gibt good explanations.)

Wenn Sie weitere Ebenen hinzufügen möchten, aktualisieren Sie die Abfrage als solche:

  • definieren eine neue Variable aus Zweigen, z.B. l3s
  • die neue Variable, z.B. zu l3
  • erstellen Sie zusätzliche Knoten für die neue Ebene mit dem angehängten Variablennamen, z. MERGE (n3:TreeNode {name: l1+"_"+l2+"_"+l3})
  • neue Kanten von der vorherigen Ebene erstellen, z.

Natürlich können Sie auch Nummern für die Knoten verwenden. Anstatt Unterstriche anzuhängen, müssen Sie eine neue numerische "ID" für jeden Knoten generieren.

WITH range(1,2) AS branches 
WITH branches AS l1s, branches AS l2s 
UNWIND l1s AS l1 
UNWIND l2s AS l2 
MERGE (n0:TreeNode {number: 0}) 
MERGE (n1:TreeNode {number: l1}) 
MERGE (n2:TreeNode {number: 2*l1+l2}) 
MERGE (n0)-[:X]->(n1) 
MERGE (n1)-[:X]->(n2) 

Das Ergebnis:

enter image description here

1

Sie können es in Cypher tun, indem die Wurzel zu schaffen:

CREATE (root:Root:Leaf); 

dann die Abfrage Wiederholung einer Ebene hinzugefügt, so oft, wie Sie benötigen (An einem bestimmten Punkt wird die Transaktion jedoch zu groß):

MATCH (n:Leaf) 
REMOVE n:Leaf 
FOREACH (i IN range(0, 7) | 
    CREATE (n)-[:CONTAINS]->(:Node:Leaf {value: coalesce(n.value, "") + toString(i)}));