目标是计算图形的最大组合pot
。规则如下:
如果一个节点的f-mkt
与另一个节点picks
的所有节点都不相同,或者至少一个相同,则两个节点兼容,则其pick
应该兼容也与其他节点相同。例如,在下图中,节点1具有f-mkt
中的一个125*41
,它也位于节点3中,但是由于其选择123*41*2
也与节点3中的相同,因此它们兼容。
但是,节点2和节点3不兼容,因为两者中都存在f-mkt
中的124*40
,但是在节点3中找不到节点2中的pick 123*40*1
,这使它们不兼容。因此,图的最大组合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步骤?