gremlin - 使用父顶点属性过滤掉正在运行的顶点
问题描述
目标是计算pot
图形的最大组合。规则如下:
f-mkt
如果一个节点与另一个节点的所有节点不同,picks
或者至少一个节点相同,则两个节点是兼容的,那么它pick
也应该与另一个节点的相同。例如在下图中,节点 1 具有其中之一f-mkt
,125*41
在节点 3 中也可以找到,但是由于其选取123*41*2
也与节点 3 中的相同,因此它们是兼容的。
但是节点 2 和节点 3 不兼容,因为两者中都有一个f-mkt
of 124*40
,但是pick 123*40*1
节点 2 中的 in 节点在节点 3 中却没有,使得它们不兼容。所以pot
图的最大组合是(节点 1 + 节点 2,节点 1 + 节点 3)的最大值,在这种情况下是 50 + 90 = 130。
换句话说,图的组合是在消除不兼容之后,取每个节点的连接顶点pot
之和的最大值。pot
<?xml version='1.0' ?>
<graphml xmlns='http://graphml.graphdrawing.org/xmlns'>
<key id='labelV' for='node' attr.name='labelV' attr.type='string'></key>
<key id='type' for='node' attr.name='type' attr.type='string'></key>
<key id='picks' for='node' attr.name='picks' attr.type='string'></key>
<key id='mkt' for='node' attr.name='mkt' attr.type='string'></key>
<key id='f-mkt' for='node' attr.name='f-mkt' attr.type='string'></key>
<key id='labelE' for='edge' attr.name='labelE' attr.type='string'></key>
<graph id='routes' edgedefault='directed'>
<!-- vertices -->
<node id='1'>
<data key='labelV'>transaction</data>
<data key='type'>transaction</data>
<data key='picks'>123*41*2</data>
<data key='f-mkt'>123*41</data>
<data key='pot'>50.0</data>
</node>
<node id='2'>
<data key='labelV'>transaction</data>
<data key='type'>transaction</data>
<data key='picks'>123*40*1</data>
<data key='f-mkt'>123*40</data>
<data key='pot'>80.0</data>
</node>
<node id='3'>
<data key='labelV'>transaction</data>
<data key='type'>transaction</data>
<data key='picks'>125*41*2</data>
<data key='f-mkt'>125*41</data>
<data key='pot'>90.0</data>
</node>
<node id='4'>
<data key='labelV'>transaction</data>
<data key='type'>transaction</data>
<data key='picks'>123*41*1</data>
<data key='f-mkt'>123*41</data>
<data key='pot'>40.0</data>
</node>
<edge id='33' source='1' target='2'>
<data key='labelE'>compatible</data>
</edge>
<edge id='34' source='1' target='3'>
<data key='labelE'>compatible</data>
</edge>
<edge id='35' source='2' target='1'>
<data key='labelE'>compatible</data>
</edge>
<edge id='36' source='3' target='1'>
<data key='labelE'>compatible</data>
</edge>
<edge id='37' source='3' target='4'>
<data key='labelE'>compatible</data>
</edge>
<edge id='38' source='4' target='3'>
<data key='labelE'>compatible</data>
</edge>
</graph>
</graphml>
这是完成多值属性的代码
g.V(3).property(set,'picks','124*40*3').property(set,'picks','123*40*2')
g.V(3).property(set,'f-mkt','124*40').property(set,'f-mkt','123*40')
g.V(2).property(set, 'picks', '124*40*2')
g.V(2).property(set, 'f-mkt', '124*40')
编辑:我想pot
通过取其连接的子图来计算图中每个节点的最大值,并在取子图的总和之前在该子图中执行上述规则pot
,然后是所有子图的最大值。
为了实现这一点,我需要进行如上所述的比较,但我什至无法让下面的简单测试工作:1
g.V(1).as('v').map{out().where(values('f-mkt').is(within(it.get().value('f-mkt'))))}
我得到这个作为回应:
[VertexStep(OUT,vertex), TraversalFilterStep([PropertiesStep([f-mkt],value), IsStep(within([123*41]))])]
那么如何将该值从父节点动态传递到 where 步骤?
解决方案
推荐阅读
- php - 如何在 php 7 codeigniter 3.1.11 中添加 css 和 js?
- asp.net-core - 如何从 config.json 为控制器中的所有操作设置路由的公共部分(前缀)?
- javascript - 数组推送方法行为异常javascript
- .htaccess - htaccess 将查询字符串附加到所有 URL
- django - Django:在列表视图中包含一个表单
- sml - 在列表中显示多次出现的项目,sml
- laravel - laravel 删除数据库中的数据
- ios - 尝试将 Google AdMob 集成到 iOS 上的 libgdx 游戏中会导致“找不到框架 GoogleUtilities”
- r - 将数据框中的文本信息拆分为单个单词并检测它们是否是字典 R 的一部分
- php - Mysql,将PHP中的选项存储为数组