gStore最新版1.2之新增内置高级函数详解(一)

gStore1.2版本新增了七个高级函数,我们分成2期来对每一个函数的使用进行详细介绍,本期介绍的高级函数为单源最短路径(包括SSSP和SSSPLen)、标签传播(labelProp)、弱连通分量(WCC)三个高级函数。

1 单源最短路径

查询以结点 u 为源结点到其余结点的最短路径。提供了两种查询方式:SSSP和SSSPLen;SSSP返回最短路径,SSSPLen返回最短路径长度。

SSSP(u, directed, pred_set)
SSSPLen(u, directed, pred_set)
  • 参数 u : 变量或结点 IRI,表示源结点

    directed : 布尔值,为真表示有向,为假表示无向(图中所有边视为双向)

    pred_set:考虑的谓词集合(若设置为空 {} ,则表示允许出现数据中的所有谓词)

  • 返回值

    SSSP 返回最短路径,返回值为以下形式,其中 src 为 u 对应的 IRI;dst 为某可达结点对应的 IRI ;nodes 包含路径中涉及结点的下标和IRI;edges 包含路径中涉及边的首尾节点下标和谓词 IRI 。

    {
        "paths": [
            {
                "src": "<src_IRI>",
                "dst": "<dst_IRI>",
                "edges": [
                    {
                        "fromNode": 0,
                        "toNode": 1,
                        "predIRI": "<pred>"
                    }
                ],
                "nodes": [
                    {
                        "nodeIndex": 0,
                        "nodeIRI": "<src_IRI>"
                    },
                    {
                        "nodeIndex": 1,
                        "nodeIRI": "<dst_IRI>"
                    }
                ]
            },
            ...
        ]
    }
    

    SSSPLen 返回最短路径长度,返回值为以下形式,其中 src 为 u 对应的 IRI;dst为某可达结点对应的IRI ;length为src到dst的最短路长度。

    {
        "paths": [
            {
                "src": "<src_IRI>",
                "dst": "<dst_IRI>",
                "length": <src_dst_length>
            },
            ...
        ]
    }
    
  • 示例(数据集详见【4 示例数据集】)

    下面的查询返回以Alice无向图(图中所有边视为双向)中的单源最短路径,边上的关系可以是喜欢关注,查询语句为:

    SELECT (SSSP(<Alice>, false, {<喜欢>, <关注>}) AS ?x) WHERE{}
    

    结果如下:

    {
        "paths": [
            {
                "src": "<Alice>",
                "dst": "<Francis>",
                "edges": [
                    {"fromNode": 0,"toNode": 1,"predIRI": "<喜欢>"},
                    {"fromNode": 1,"toNode": 3,"predIRI": "<喜欢>"},
                    {"fromNode": 3,"toNode": 4,"predIRI": "<喜欢>"}
                ],
                "nodes": [
                    {"nodeIndex": 4,"nodeIRI": "<Francis>"},
                    {"nodeIndex": 3,"nodeIRI": "<Carol>"},
                    {"nodeIndex": 1,"nodeIRI": "<Bob>"},
                    {"nodeIndex": 0,"nodeIRI": "<Alice>"}
                ]
            },
            {
                "src": "<Alice>",
                "dst": "<Carol>",
                "edges": [
                    {"fromNode": 0,"toNode": 1,"predIRI": "<喜欢>"},
                    {"fromNode": 1,"toNode": 3,"predIRI": "<喜欢>"}
                ],
                "nodes": [
                    {"nodeIndex": 3,"nodeIRI": "<Carol>"},
                    {"nodeIndex": 1,"nodeIRI": "<Bob>"},
                    {"nodeIndex": 0,"nodeIRI": "<Alice>"}
                ]
            },
            {
                "src": "<Alice>",
                "dst": "<Alice>",
                "edges": [],
                "nodes": [
                    {"nodeIndex": 0,"nodeIRI": "<Alice>"}
                ]
            },
            {
                "src": "<Alice>",
                "dst": "<Dave>",
                "edges": [
                    {"fromNode": 0,"toNode": 5,"predIRI": "<关注>"}
                ],
                "nodes": [
                    {"nodeIndex": 5,"nodeIRI": "<Dave>"},
                    {"nodeIndex": 0,"nodeIRI": "<Alice>"}
                ]
            },
            {
                "src": "<Alice>",
                "dst": "<Bob>",
                "edges": [
                    {"fromNode": 0,"toNode": 1,"predIRI": "<喜欢>"}
                ],
                "nodes": [
                    {"nodeIndex": 1,"nodeIRI": "<Bob>"},
                    {"nodeIndex": 0,"nodeIRI": "<Alice>"}
                ]
            },
            {
                "src": "<Alice>",
                "dst": "<Eve>",
                "edges": [
                    {"fromNode": 0,"toNode": 1,"predIRI": "<喜欢>"},
                    {"fromNode": 1,"toNode": 2,"predIRI": "<喜欢>"}
                ],
                "nodes": [
                    {"nodeIndex": 2,"nodeIRI": "<Eve>"},
                    {"nodeIndex": 1,"nodeIRI": "<Bob>"},
                    {"nodeIndex": 0,"nodeIRI": "<Alice>"}
                ]
            }
        ]
    }
    

    若要返回所有单源最短路径的长度,则使用以下查询:

    SELECT (SSSPLen(<Alice>, false, {<喜欢>, <关注>}) AS ?x) WHERE{}
    

    结果如下:

    {
        "paths": [
            {"src": "<Alice>","dst": "<Francis>","length": 3},
            {"src": "<Alice>","dst": "<Carol>","length": 2},
            {"src": "<Alice>","dst": "<Alice>","length": 0},
            {"src": "<Alice>","dst": "<Dave>","length": 1},
            {"src": "<Alice>","dst": "<Bob>","length": 1},
            {"src": "<Alice>","dst": "<Eve>","length": 2}
        ]
    }
    

2 标签传播 labelProp

基于标签传播查询图中各结点的聚类情况,可用于社区发现等多种应用。

labelProp(directed, pred_set, MaxIter=maxIter)
  • 参数 directed : 布尔值,为真表示有向,为假表示无向(图中所有边视为双向)

    pred_set:考虑的谓词集合(若设置为空 {} ,则表示允许出现数据中的所有谓词)

    maxIter: 最大迭代次数,大于等于1的整数

  • 返回值

    返回分类数组,其中元素为结点 IRI ,对应图中结点的一个划分。

    {
        "paths": [
            ["<IRI_1>", "<IRI_2>"],
            ["<IRI_N>"],
            ...
        ]
    }
    
  • 示例(数据集详见【4 示例数据集】)

    下面的查询返回有向图中基于标签传播算法的聚类划分,边上的关系只能是不喜欢,查询语句为:

    SELECT (labelProp(true,{<不喜欢>},MaxIter=10) AS ?x) WHERE {}
    

    结果如下:

    {
        "paths": [
            ["<Alice>"],
            ["<Bob>"],
            ["<Eve>","<Carol>","<Francis>","<Dave>"]
        ]
    }
    

    函数执行过程推演:

    (1)首先将图中各个节点如下赋予标签

    <Alice><Bob><Eve><Carol><Francis><Dave>
    012345

    (2)标签传播过程如下表所示

    <Alice><Bob><Eve><Carol><Francis><Dave>
    012345
    014355
    010355
    015333
    010333
    010333
    013333
    010333
    013333

3 弱连通分量 WCC

返回图的所有弱连通分量。

WCC(pred_set)
  • 参数

    pred_set:构成弱连通分量的边上允许出现的谓词集合。若设置为空 {} ,则表示允许出现数据中的所有谓

  • 返回值

    返回分类数组,形式与标签传播的返回值相同。

    {
        "paths": [
            ["<IRI_1>", "<IRI_2>"],
            ["<IRI_N>"],
            ...
        ]
    }
    
  • 示例(数据集详见【4 示例数据集】)

    下面的查询返回图中的所有弱连通分量,且构成它的边只能由喜欢关系标记:

    select (WCC({<喜欢>}) as ?y) where{}
    

    结果如下,即 Francis、Alice、Bob、Carol、Eve 在一个弱连通分量中,Dave 在另一个弱连通分量中:

    {
        "paths":[
            ["<Francis>","<Alice>","<Bob>","<Carol>","<Eve>"],
            ["<Dave>"]
         ]
    }
    

4 示例数据集

<Alice> <关注> <Bob> .
<Alice> <喜欢> <Bob> .
<Alice> <不喜欢> <Eve> .
<Bob> <关注> <Alice> .
<Bob> <喜欢> <Eve> .
<Carol> <关注> <Bob> .
<Carol> <喜欢> <Bob> .
<Carol> <不喜欢> <Francis> .
<Dave> <关注> <Alice> .
<Dave> <关注> <Eve> .
<Dave> <不喜欢> <Francis> .
<Eve> <喜欢> <Carol> .
<Francis> <喜欢> <Carol> .
<Francis> <不喜欢> <Dave> .
<Francis> <不喜欢> <Eve> .

虚拟网络社交图

虚拟网络社交图

以上为gStore1.2中新增的三个高级函数的使用详解,下一篇我们将继续介绍新增的另外四个高级函数的使用详解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值