zoukankan      html  css  js  c++  java
  • 在ArangoDB中实现connectedcomponents算法

    操作环境:

    tool:ArangoDB 3.3.13

    操作系统:Debian 7.2.0-20

    概念:

    Connected Components即连通体算法。用id标注图中每个连通体,将连通体中序号最小的顶点的id作为连通体的id。

    如果在图G中,任意2个顶点之间都存在路径,那么称G为连通图,否则称该图为非连通图,则其中的极大连通子图称为连通体,如下图所示,该图中有两个连通体:

    实例:

    创建集合

    //testv
    LET data = [{"_key":"6014c5cac3424d8386dac12c46017c03","host_name":"Salih Tektase"},
    {"_key":"6014c5ccca5b4cae893257bf86f0ead0","host_name":"Aditya Bramhan"},
    {"_key":"6014c5c80177417fbfd0faf9d5fb31a4","host_name":"Ica palya"},
    {"_key":"6014c5c891e54e4a8903cd306d55eb26","host_name":"null"},
    {"_key":"6014c5c8f29d426686d6c30152a01459","host_name":"Boanny Patel"},
    {"_key":"6014c5ccd2484a4581137ab8aa245ba7","host_name":"El Chapo"},
    {"_key":"6014c5c8f1cb47ff886dd1991d19e59d","host_name":"Andrej Altuchov"},
    {"_key":"6014c5dd17b54eda83e02e8dd913dba0","host_name":"Maria"},
    {"_key":"6014c5e78bfd4051a421bd6adf017e56","host_name":"null"},
    {"_key":"6014c5f1c88e40a6a1aa88da08d7c404","host_name":"Aaron Villaflor"}]
    
    for d in data
        insert d into testv
    //teste
    LET data = [{"_key":"2716265062","_from":"testv/6014c5ccca5b4cae893257bf86f0ead0","_to":"testv/6014c5cac3424d8386dac12c46017c03"},
    {"_key":"2716265063","_from":"testv/6014c5c80177417fbfd0faf9d5fb31a4","_to":"testv/6014c5cac3424d8386dac12c46017c03"},
    {"_key":"2716265064","_from":"testv/6014c5ccd2484a4581137ab8aa245ba7","_to":"testv/6014c5c8f29d426686d6c30152a01459"},
    {"_key":"2716265065","_from":"testv/6014c5e78bfd4051a421bd6adf017e56","_to":"testv/6014c5dd17b54eda83e02e8dd913dba0"},
    {"_key":"2716265066","_from":"testv/6014c5f1c88e40a6a1aa88da08d7c404","_to":"testv/6014c5dd17b54eda83e02e8dd913dba0"},
    {"_key":"2716265067","_from":"testv/6014c5c8f29d426686d6c30152a01459","_to":"testv/6014c5c891e54e4a8903cd306d55eb26"},
    {"_key":"2716265068","_from":"testv/6014c5c891e54e4a8903cd306d55eb26","_to":"testv/6014c5ccd2484a4581137ab8aa245ba7"},
    {"_key":"2716265069","_from":"testv/6014c5c8f1cb47ff886dd1991d19e59d","_to":"testv/6014c5e78bfd4051a421bd6adf017e56"}]
    
    for d in data
        insert d into teste
    //teste2
    LET data = [{"_key":"3016636","_from":"testv/6014c5cac3424d8386dac12c46017c03","_to":"testv/6014c5ccca5b4cae893257bf86f0ead0"},
    {"_key":"3016637","_from":"testv/6014c5cac3424d8386dac12c46017c03","_to":"testv/6014c5c80177417fbfd0faf9d5fb31a4"},
    {"_key":"3016639","_from":"testv/6014c5dd17b54eda83e02e8dd913dba0","_to":"testv/6014c5e78bfd4051a421bd6adf017e56"},
    {"_key":"3016641","_from":"testv/6014c5c891e54e4a8903cd306d55eb26","_to":"testv/6014c5c8f29d426686d6c30152a01459"},
    {"_key":"3016638","_from":"testv/6014c5c8f29d426686d6c30152a01459","_to":"testv/6014c5ccd2484a4581137ab8aa245ba7"},
    {"_key":"3016640","_from":"testv/6014c5dd17b54eda83e02e8dd913dba0","_to":"testv/6014c5f1c88e40a6a1aa88da08d7c404"},
    {"_key":"3016642","_from":"testv/6014c5ccd2484a4581137ab8aa245ba7","_to":"testv/6014c5c891e54e4a8903cd306d55eb26"},
    {"_key":"3016643","_from":"testv/6014c5e78bfd4051a421bd6adf017e56","_to":"testv/6014c5c8f1cb47ff886dd1991d19e59d"}]
    
    for d in data
        insert d into teste2

    创建图

    运行算法

    var pregel = require("@arangodb/pregel")
    var handle = pregel.start("connectedcomponents", "cc", {maxGSS: 250, resultField: "component"})

    查看进程:

    var status = pregel.status(handle);

    结果

     

     

    参考资料:

    https://github.com/arangodb/arangodb/issues/4062

    https://blog.csdn.net/zryowen123/article/details/77386992

  • 相关阅读:
    错误需要理由吗?(SQL Server 不存在或访问被拒绝)
    关于权限设计的轻量级实现
    ppc通过数据线与共享电脑上网
    解读.Net中的命名空间和程序集
    .Net XML 树
    软件开发教父与国内高手论道实录全文
    企业信息化, 该怎么规划?
    ASP.NET Portal Starter Kit中的角色验证
    用js实现类似分享到显示效果
    用js实现同一个页面多个渐变效果
  • 原文地址:https://www.cnblogs.com/minglex/p/9524264.html
Copyright © 2011-2022 走看看