在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":"","_from":"testv/6014c5ccca5b4cae893257bf86f0ead0","_to":"testv/6014c5cac3424d8386dac12c46017c03"},
{"_key":"","_from":"testv/6014c5c80177417fbfd0faf9d5fb31a4","_to":"testv/6014c5cac3424d8386dac12c46017c03"},
{"_key":"","_from":"testv/6014c5ccd2484a4581137ab8aa245ba7","_to":"testv/6014c5c8f29d426686d6c30152a01459"},
{"_key":"","_from":"testv/6014c5e78bfd4051a421bd6adf017e56","_to":"testv/6014c5dd17b54eda83e02e8dd913dba0"},
{"_key":"","_from":"testv/6014c5f1c88e40a6a1aa88da08d7c404","_to":"testv/6014c5dd17b54eda83e02e8dd913dba0"},
{"_key":"","_from":"testv/6014c5c8f29d426686d6c30152a01459","_to":"testv/6014c5c891e54e4a8903cd306d55eb26"},
{"_key":"","_from":"testv/6014c5c891e54e4a8903cd306d55eb26","_to":"testv/6014c5ccd2484a4581137ab8aa245ba7"},
{"_key":"","_from":"testv/6014c5c8f1cb47ff886dd1991d19e59d","_to":"testv/6014c5e78bfd4051a421bd6adf017e56"}] for d in data
insert d into teste
//teste2
LET data = [{"_key":"","_from":"testv/6014c5cac3424d8386dac12c46017c03","_to":"testv/6014c5ccca5b4cae893257bf86f0ead0"},
{"_key":"","_from":"testv/6014c5cac3424d8386dac12c46017c03","_to":"testv/6014c5c80177417fbfd0faf9d5fb31a4"},
{"_key":"","_from":"testv/6014c5dd17b54eda83e02e8dd913dba0","_to":"testv/6014c5e78bfd4051a421bd6adf017e56"},
{"_key":"","_from":"testv/6014c5c891e54e4a8903cd306d55eb26","_to":"testv/6014c5c8f29d426686d6c30152a01459"},
{"_key":"","_from":"testv/6014c5c8f29d426686d6c30152a01459","_to":"testv/6014c5ccd2484a4581137ab8aa245ba7"},
{"_key":"","_from":"testv/6014c5dd17b54eda83e02e8dd913dba0","_to":"testv/6014c5f1c88e40a6a1aa88da08d7c404"},
{"_key":"","_from":"testv/6014c5ccd2484a4581137ab8aa245ba7","_to":"testv/6014c5c891e54e4a8903cd306d55eb26"},
{"_key":"","_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: , resultField: "component"})
查看进程:
var status = pregel.status(handle);
结果

参考资料:
https://github.com/arangodb/arangodb/issues/4062
https://blog.csdn.net/zryowen123/article/details/77386992
在ArangoDB中实现connectedcomponents算法的更多相关文章
- Java中的经典算法之冒泡排序(Bubble Sort)
Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...
- 分布式数据库中的Paxos 算法
分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...
- Java中的查找算法之顺序查找(Sequential Search)
Java中的查找算法之顺序查找(Sequential Search) 神话丿小王子的博客主页 a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数 ...
- Java中的经典算法之选择排序(SelectionSort)
Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...
- STL中的查找算法
STL中有很多算法,这些算法可以用到一个或多个STL容器(因为STL的一个设计思想是将算法和容器进行分离),也可以用到非容器序列比如数组中.众多算法中,查找算法是应用最为普遍的一类. 单个元素查找 1 ...
- opencv3中的机器学习算法之:EM算法
不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注.相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计.也能得到每个样本对应的标注值,类似于kmea ...
- 在opencv3中的机器学习算法
在opencv3.0中,提供了一个ml.cpp的文件,这里面全是机器学习的算法,共提供了这么几种: 1.正态贝叶斯:normal Bayessian classifier 我已在另外一篇博文中介 ...
- Java中的排序算法(2)
Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...
- STL笔记(6)标准库:标准库中的排序算法
STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...
随机推荐
- FIT文件CRC校验
校验FIT文件CRC代码做个记录,分为两步先校验头部然后再校验整个FIT文件.校验头部不是必需的看个人需要吧.为了偷懒使用Okio库,还有计算CRC的时候用的Garmin的FitSDK. public ...
- org.hibernate.AnnotationException: No identifier specified for entity 错误解决
主键对应的属性上加上@Id注解,对应javax.persistence.Id @Id private Long id;
- SUSE CaaS Platform 4 - 安装技巧
1.虚拟化环境搭建 - 网络 首先,虚拟机其中一块网卡桥接到 VMnet8 上,通过 VMnet8 地址转换出去访问互联网,如果我们直接桥接到 WIFI 网卡上,由于在不同的的网络环境,地址会时长会 ...
- IDEA 学习笔记之 Java项目开发
Java项目开发: 新建模块: 添加JDK: 导入本地Jars: 从远程Maven仓库下载: 创建package: 新建类/接口/枚举等: 字体太小,改字体: Duplicate Scheme 修改编 ...
- mfc CString 转 char *
做界面时遇到需要从界面编辑框接受输入字符(用户名,密码之类),然后转为char *类型交给程序处理,记录一下找到的方法,主要参考https://blog.csdn.net/neverup_/artic ...
- Python多任务之进程
Process多进程 进程的概念 程序是没有运行的代码,静态的: 进程是运行起来的程序,进程是一个程序运行起来之后和资源的总称: 程序只有一个,但同一份程序可以有多个进程:例如,电脑上多开QQ: 程序 ...
- 无意间做了个 web 版的 JVM 监控端(前后端分离 React+Spring Boot)
之前写了JConsole.VisualVM 依赖的 JMX 技术,然后放出了一个用纯 JMX 实现的 web 版本的 JConsole 的截图,今天源码来了. 本来就是为了更多的了解 JMX,第一步就 ...
- 从零开始的vue学习笔记(七)
前言 今天花一天时间阅读完vuex的官方文档,简单的做一下总结和记录 Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,以前的符合"单向数据流"理念的 ...
- QCustomPlot 基础
QCutomPlot简介 官网网址及介绍 https://www.qcustomplot.com/ QCustomPlot is a Qt C++ widget for plotting and da ...
- ConcurrentHashMap实现原理以及源码分析
ConcurrentHashMap是HashMap的高并发版本,是线程安全的,而HashMap是非线程安全的 一.底层实现 底层结构跟hashmap一样,都是通过数组+链表+红黑树实现的,不过它要保证 ...