- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从事一个项目,其中每个用户都表示为 Neo4j 中的一个节点。用户可以“认可”其他用户,从而建立关系。我希望能够根据用户的信任度对用户进行排名,其中每个关系的权重都基于支持他们的用户的权重。例如,一个得到 20 多个用户认可的用户应该比另一个只有几个认可的用户对自己的认可有更多的权重。
我现在查询它的方式给了我每个深度的节点数,但它没有按父节点分组(例如,所有 3 级节点都在一个数组中返回,你不知道级别 2 中的哪些节点每个都相关)。
MATCH (n)-[r:TRUSTS*]->(u)
WHERE u.name = 'XYZ' WITH n.name AS n, LENGTH(r) AS depth
RETURN COLLECT(DISTINCT n) AS endorsers, depth
ORDER BY depth
这是网络的样子,以及对 Ben 的查询结果。
如您所见,Ben
有 2 个一级背书人,JM
有两个二级背书人,从图中可以看出,但不是来自查询结果。
任何人都可以建议如何返回按父节点和深度分组的结果,以便我可以在我的代码中计算信任排名,或者更好的方法来执行加权平均以实现第一段中的目标?
这是我为 Ben 想象的那种树结构输出的示例:
Ben
├── JM
│ ├── Simon
│ └── Rus
│ ├── Robbie
│ │ ├── Ben
│ │ │ └──/ should terminate here
│ │ ├── Simon
│ │ └── JM
│ └── Ben
│ └──/ should terminate here
└── Simon
这是 Rus 的另一个:
Rus
├── Robbie
│ ├── Simon
│ ├── Ben
│ │ ├── Simon
│ │ └── JM
│ │ ├── Simon
│ │ └── Rus
│ └── JM
│ ├── Simon
│ └── Rus
└── Ben
├── Simon
└── JM
├── Simon
└── Rus
显然它应该在到达我查询的用户时终止(否则它将是一个循环结构)。
我找到的最接近的匹配是 Tezra 提供的查询,它是:
MATCH (target:User{name:"Rus"}), (person:User), p=((person)-[:TRUSTS*]->(target))
WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target)
RETURN NODES(p)[-2].name as endorser, COLLECT(person.name) as endorsed_by, SIZE(RELATIONSHIPS(p)) as depth
ORDER BY depth
此查询返回“Rus”的一级背书,然后返回 n 级背书一级背书:
| endorser | endorsed_by | depth |
|----------|-----------------------|-------|
| Robbie | Robbie | 1 | // 1st level endorsers of Rus
| Ben | Ben | 1 | // 1st level endorsers of Rus
| Robbie | JM, Simon, Ben | 2 | // 1st level endorsers of Robbie
| Ben | JM, Simon | 2 | // 1st level endorsers of Ben
| Ben | Rus, Simon | 3 | // 2nd level endorsers of Ben
| Robbie | Rus, Simon, JM, Simon | 3 | // 2nd level endorsers of Robbie
| Robbie | Rus, Simon | 4 | // 3rd level endorsers of Robbie
这不太正确,您只知道谁间接背书了 Ben 和 Robbie,而不知道中间的节点。
例如,从该输出我们知道 Robbie
的一级背书人是 JM
、Simon
和 Ben
。第 2 级背书人是 Rus
、Simon
、JM
和 Simon
(树中的第 4 列),但是有无法知道一级和二级背书人之间的关系。就此查询而言,以下树是相同的:
Rus
└── Robbie
├── Simon
├── Ben <--- here Ben has 3 children (so should be weighted higher)
│ ├── Simon
│ ├── Rus
│ └── JM
└── JM
└── Simon
Rus
└── Robbie
├── Simon
├── Ben
│ └── Simon
└── JM <--- here JM has 3 children instead
├── Simon
├── Rus
└── JM
我正在寻找的是一个查询,它返回类似这样的东西(每个背书的父级可以重建完整的树),这是 Rus 的想象输出:
+--------+----------+-------+
| parent | children | depth |
+--------+----------+-------+
| Rus | Robbie | 1 |
+--------+----------+-------+
| Rus | Ben | 1 |
+--------+----------+-------+
| Robbie | Simon | 2 |
+--------+----------+-------+
| Robbie | Ben | 2 |
+--------+----------+-------+
| Robbie | JM | 2 |
+--------+----------+-------+
| Ben | Simon | 3 |
+--------+----------+-------+
| Ben | JM | 3 |
+--------+----------+-------+
| JM | Simon | 4 |
+--------+----------+-------+
| JM | Rus | 4 |
+--------+----------+-------+
| JM | Simon | 3 |
+--------+----------+-------+
| JM | Rus | 3 |
+--------+----------+-------+
| Ben | Simon | 2 |
+--------+----------+-------+
| Ben | JM | 2 |
+--------+----------+-------+
| JM | Simon | 3 |
+--------+----------+-------+
| JM | Rus | 3 |
+--------+----------+-------+
最佳答案
首先,这是一个console播放/测试数据。
这里有一些评论查询。让我知道哪个最能满足您的需求。 (按相关性排序)
// Match the query target, and everyone who can endorse
MATCH (target:User{name:"Ben"}), (person:User),
// Match all endorse chains, length limit 5
p=((person)-[:TRUSTS*..5]->(target))
// Our target may start, and will end; our chain, so no other path nodes can be him.
// Normal matching will not match cycles.
// Adjust further path termination conditions here.
WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target)
// Return target (extra), the 1'st tier endorser, their endorsers, and rank(depth) of each of those endorsers.
RETURN target.name, NODES(p)[-2] as endorser, COLLECT(person.name), SIZE(RELATIONSHIPS(p)) as depth
ORDER BY depth
// one line copy for copy-paste into console
MATCH (target:User{name:"Ben"}), (person:User), p=((person)-[:TRUSTS*..5]->(target)) WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target) RETURN target.name, NODES(p)[-2] as endorser, COLLECT(person.name), SIZE(RELATIONSHIPS(p)) as depth ORDER BY depth
另一种返回格式
WITH NODES(p)[-2] as endorser, {people:COLLECT(person.name), depth:SIZE(RELATIONSHIPS(p))} as auth
RETURN endorser, COLLECT(auth)
// one line copy for copy-paste into console
MATCH (target:User{name:"Ben"}), (person:User), p=((person)-[:TRUSTS*..5]->(target)) WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target) WITH NODES(p)[-2] as endorser, {people:COLLECT(person.name), depth:SIZE(RELATIONSHIPS(p))} as auth RETURN endorser, COLLECT(auth)
更新:替代返回格式以匹配 OP 的返回表
MATCH (target:User{name:"Rus"}), (person:User), p=((person)-[:TRUSTS*]->(target)) WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target) WITH NODES(p) as n, SIZE(RELATIONSHIPS(p)) as depth RETURN DISTINCT n[-depth] as parent, n[-depth-1] as child, depth ORDER BY depth
关于neo4j - 获取每个关系深度的节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589975/
在C语言中,当有变量(假设都是int)i小于j时,我们可以用等式 i^=j^=i^=j 交换两个变量的值。例如,令int i = 3,j = 5;在计算 i^=j^=i^=j 之后,我有 i = 5,
我为以下问题编写了以下代码: 给定一个由 N 个正整数组成的序列 A,编写一个程序来查找满足 i > A[j]A[i](A[i] 的 A[j] 次方 > A[j] 的 A[i] 次方)。 我的代码通过
这个表达式是从左到右解析的吗?我试图解释解析的结果,但最后的结果是错误的。 int j=10, k=10; j+=j-=j*=j; //j=j+(j-=j*=j)=j+(j-j*j) k+=k*=
给定一个整数数组 A ,我试图找出在给定位置 j ,A[j] 从每个 i=0 到 i=j 在 A 中出现了多少次。我设计了一个如下所示的解决方案 map CF[400005]; for(int i=0
你能帮我算法吗: 给定 2 个相同大小的数组 a[]和 b[]具有大于或等于 1 的整数。 查找不相等的索引 i和 j ( i != j ) 使得值 -max(a[i]*b[i] + a[i] * b
每次用J的M.副词,性能显着下降。因为我怀疑艾弗森和许比我聪明得多,我一定是做错了什么。 考虑 Collatz conjecture .这里似乎有各种各样的内存机会,但不管我放在哪里M. ,性能太差了
假设一个包含各种类型的盒装矩阵: matrix =: ('abc';'defgh';23),:('foo';'bar';45) matrix +---+-----+--+|abc|defgh|23|+
是否有可能对于两个正整数 i 和 j,(-i)/j 不等于 -(i/j)?我不知道这是否可能......我认为这将是关于位的东西,或者 char 类型的溢出或其他东西,但我找不到它。有什么想法吗? 最
假设两个不同大小的数组: N0 =: i. 50 N1 =: i. 500 应该有一种方法可以获得唯一的对,只需将两者结合起来即可。我发现的“最简单”是: ]$R =: |:,"2 |: (,.N0)
我是 J 的新用户,我只是想知道 J 包中是否实现了三次样条插值方法? 最佳答案 我自己不熟悉,但是我确实安装了所有的包,所以 $ rg -l -i spline /usr/share/j/9.02
在 Q/kdb 中,您可以使用 ': 轻松修改动词,它代表每个优先级。它会将动词应用于一个元素及其之前的邻居。例如 =': 检查值对是否相等。在 J 中,您可以轻松折叠 /\ 但它是累积的,是否有成对
嗨,我有一个 4x4 双矩阵 A 1+2i 2-1i -3-2i -1+4i 3-1i -3+2i 1-3i -1-3i 4+3i 3+5i 1-2i -1-4i
刚刚发现 J 语言,我输入: 1+^o.*0j1 I expected the answer to be 0 ,但我得到了 0j1.22465e_16。虽然这非常接近于 0,但我想知道为什么 J 应该
这个问题在这里已经有了答案: With arrays, why is it the case that a[5] == 5[a]? (20 个答案) 关闭 3 年前。 我正在阅读“C++ 编程语言”
当第一行是 1, 1/2 , 1/3 ....这是支持该问题的图像。 是否存在比朴素的 O(n^2) 方法更有效的方法? 我在研究伯努利数时遇到了这个问题,然后在研究“Akiyama-Tanigawa
我写了一段Java代码,它在无限循环中运行。 下面是代码: public class TestProgram { public static void main(String[] args){
for (int i = n; i > 0; i /= 2) { for (int j = 0; j 0; i /= 2) 的第一个循环结果 O(log N) . 第二个循环for (int
如问题中所述,需要找到数组中 (i,j) 对的总数,使得 (1) **ia[j]** 其中 i 和 j 是数组的索引。没有空间限制。 我的问题是 1) Is there any approach w
for l in range(1,len(S)-1): for i in range(1,len(S)-l): j=i+l for X in N:
第二个for循环的复杂度是多少?会是n-i吗?根据我的理解,第一个 for 循环将执行 n 次,但第二个 for 循环中的索引设置为 i。 //where n is the number elemen
我是一名优秀的程序员,十分优秀!