Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gremlin 小精灵:当顶点组相似时,我如何合并它们_Gremlin_Tinkerpop_Tinkerpop3_Gremlin Server - Fatal编程技术网

Gremlin 小精灵:当顶点组相似时,我如何合并它们

Gremlin 小精灵:当顶点组相似时,我如何合并它们,gremlin,tinkerpop,tinkerpop3,gremlin-server,Gremlin,Tinkerpop,Tinkerpop3,Gremlin Server,我的查询返回的用户组顶点如下: [ [Pedro, Sabrina, Macka, Fer] [Pedro, Sabrina, Macka, Fer, Britney] [Brintey, Fred, Christina] ] 前两组相似,包含的顶点基本相同。我需要合并它们。 我需要合并相似的组,例如80%相似(80%的元素相同) 这在小精灵中可能吗?我该怎么做 编辑: 这个gremlify项目创建了一个类似于我在查询中得到的结果的假输出,我需要将前两个列表合并成一

我的查询返回的用户组顶点如下:

[
    [Pedro, Sabrina, Macka, Fer]
    [Pedro, Sabrina, Macka, Fer, Britney]
    [Brintey, Fred, Christina] 
]
前两组相似,包含的顶点基本相同。我需要合并它们。 我需要合并相似的组,例如80%相似(80%的元素相同)

这在小精灵中可能吗?我该怎么做

编辑:

这个gremlify项目创建了一个类似于我在查询中得到的结果的假输出,我需要将前两个列表合并成一个单列表,因为它们包含几乎相同的顶点,而不是第三个,因为它与其他列表完全不同。

所以我要问的是,如何编写一个查询来比较所有列表,检查这些列表中有多少顶点是相同的,并根据这些顶点来决定是否将它们合并为一个顶点。

gremlify项目的预期输出为:

[
  [
    "Pedro",
    "Sabrina",
    "Macka",
    "Fer",
    "Britney"
  ],
  [
    "Garry",
    "Dana",
    "Lily"
  ]
]

Gremlin没有根据列表的相似程度合并列表的步骤。Gremlin是相当灵活的,所以我想可能有办法以创造性的方式使用它的步骤来获得你想要的,但是增加的复杂性可能不值得。我个人的偏好是使用Gremlin检索我的数据,过滤掉无关的内容,然后将其转换为尽可能接近其最终结果,同时保持可读性的平衡

考虑到这一点,如果你从Gremlin得到的结果只是一个字符串列表,并且你的Gremlin在这一点上结构良好,性能良好,那么也许Gremlin已经让你走得够远了,他的工作也完成了。获取结果,然后在应用程序端通过编写一些代码对其进行后期处理,以获得最终结果。通过这种方法,您可以使用所有可用的库来处理完整的编程语言环境,从而简化最后一步

我还想补充一点,您的示例有点做作,重点是一个任意的结果,它将您的小精灵问题简化为集合操纵问题。对于graphs和Gremlin,我经常发现,为了提高结果的质量(而不仅仅是结果的格式),大量关注集合操作意味着我应该回到遍历算法的核心,而不是在遍历结束时尝试附加额外的操作

例如,如果您在这个问题中询问的输出与您之前的问题相关,那么我想知道您是否应该重新思考算法的规则。也许,正如我在其中一个答案中所说的那样,你真的没有“检测三角形,然后尝试相应地对它们进行分组”。也许有一种完全不同的算法可以解决你的问题,它甚至更有效、更高效

这篇博文“”,很好地解释了这一普遍概念。尽管它侧重于中心性算法,但总体信息非常清楚:

所有中心性度量共享一个相似的概念主题-它们都根据顶点相对于所有其他顶点的“中心”程度对图中的顶点进行评分。正是这种统一的概念可以导致不同的算法产生相同或相似的结果。图形系统架构师可以利用强的正相关性,使他们能够在可能的情况下选择计算上不太复杂的度量


在您的情况下,您可能需要在为算法声明的规则中具有更大的灵活性,以便在结果中实现更好的分组(即不那么严格)。在任何情况下,这都是需要考虑的,在最坏的情况下,你显然可以采取你在问题中描述的暴力方法,并得到你的结果。

小精灵没有根据列表的相似程度来合并列表的步骤。Gremlin是相当灵活的,所以我想可能有办法以创造性的方式使用它的步骤来获得你想要的,但是增加的复杂性可能不值得。我个人的偏好是使用Gremlin检索我的数据,过滤掉无关的内容,然后将其转换为尽可能接近其最终结果,同时保持可读性的平衡

考虑到这一点,如果你从Gremlin得到的结果只是一个字符串列表,并且你的Gremlin在这一点上结构良好,性能良好,那么也许Gremlin已经让你走得够远了,他的工作也完成了。获取结果,然后在应用程序端通过编写一些代码对其进行后期处理,以获得最终结果。通过这种方法,您可以使用所有可用的库来处理完整的编程语言环境,从而简化最后一步

我还想补充一点,您的示例有点做作,重点是一个任意的结果,它将您的小精灵问题简化为集合操纵问题。对于graphs和Gremlin,我经常发现,为了提高结果的质量(而不仅仅是结果的格式),大量关注集合操作意味着我应该回到遍历算法的核心,而不是在遍历结束时尝试附加额外的操作

例如,如果您在这个问题中询问的输出与您之前的问题相关,那么我想知道您是否应该重新思考算法的规则。也许,正如我在其中一个答案中所说的那样,你真的没有“检测三角形,然后尝试相应地对它们进行分组”。也许有一种完全不同的算法可以解决你的问题,它甚至更有效、更高效

这篇博文“”,很好地解释了这一普遍概念。尽管它侧重于中心性算法,但总体信息非常清楚:

所有中心性度量共享一个相似的概念主题-它们都根据顶点相对于所有其他顶点的“中心”程度对图中的顶点进行评分。