guava中 graphs 六
2019独角兽企业重金招聘Python工程师标准>>>
guava中 graphs 六
介绍
guava的common.graph 是一个图类型结构的库,也就是实体和他们之间的关系的工具类库
比如包含网页和超链接,科学家和他们的论文,航站和他们之间的通道,人们和他们呢之间的家族关系。目的是提供
一个共同的和可以扩展的语言能够使用这些数据。
定义
图包含了点的集合和边的集合(也叫连接),每个边连接使得节点能够相互连接,边进入的节点叫做端点
一个边是有方向的如果定义了一个起点和一个结束点,有方向的边适合不对称的结构模型
无方向的边适合有对称关系的数据模型;
有向的图它的边是有向的,无向图它的边是无向的
例子
graph.addEdege(nodeU,ndeV,edgeUV)
nodeU和nodeV是相邻的
edgeUV 是附属于节点nodeU和nodeV
如果一个图是有向的,那么
nodeU是nodeV的前边的节点
nodeV是nodeU后面的节点
edgeUV是nodeU的向外的出去边
edgeUV是nodeV的进入的边
nodeU是 edgeUV的起始边
nodeV是edgeUV的终止边
如何一个图是无向图,那么
nodeU既是nodeV的前驱后继
nodeV是nodeU的前驱后继
edgeUV是nodeU的出边也是入边
edgeUV是nodeV的出边和入边
这些都是关于一个图
循环图是图的起点和终点都是同一个点,如果是循环有向图,他的出边和入边都是附属节点,附属节点既是起点也是终点
两个边是平行的如果连接的是相同的点,并且有相同的顺序,反平行边是有相同的节点但是是相反的顺序
eg:
directedGraph.addEdge(nodeU,nodeV,edgeUV_a);
directedGraph.addEdge(nodeU,nodeV,edgeUV_b);
directedGraph.addEdge(nodeV,nodeU,edgeVU);
在directedGraph中edgeUV_a和edgeUV_b是平行的,和edgeVU是反平行的;
undirectedGraph.addEdge(nodeU,nodeV,edgeUV_a);
undirectedGraph.addEdge(nodeU,nodeV,edgeUV_b);
undirectedGraph.addEdge(nodeV,nodeU,edgeVU);
在undirectedGraph中edgeUV_a和edgeUV_b是平行的,edgeVU和其他两个也是平行的
容量Capabilities
common.graph 关注提供接口方方法使得图能够简单实用,不提供功能性如i/o和可视化,有很有限的工具
common.graph支持以下几种类型:
有向图
非有向图
节点
循环图
平行非平行边
有序无序节点
Graph types
有三个最常用的图接口,通过边的不同来区分 Graph,ValueGraph,Network,他们是对等关系,之间不会有等级区分
这些接口都结成了 SuccessorFunction 和 PredecessorsFunction
这些接口被当作访问successors和predecessors方法的入参,图的使用者已经有一个view,并不想去序列化view到common.graph,只是想在一个图的算法中使用,这种场景就很实用
Graph
是一个最简单和基础的图类型,定义了处理节点之间低频地操作,如successors(node),adjacentNodes(node),
inDegree(node),它的节点是第一个类单独的独享,他们和map中的key类似。
图graph的边完全是匿名的,他们仅仅在端点定义
Graph<Airport> 这个图中的边表示连接两个机场的一个航班
ValueGraph
ValueGraph 有所有Graph的方法,同时添加了找回特定边值的方法
valueGraph的边都有用户初始化的特殊值,这些值不需要唯一,Graph和ValueGraph的关系与map和set的关系类似
graph的边是节点对的集合,valuegraph的边是短点和值的映射。
ValueGraph 提供了asGraph()方法返回Graph的view,能够使用graph实例的方法
ValueGraph<Airport,Integer>这个值代表着往返两个机场需要的时间
Network
Network有和Graph相关的所有方法,添加了边和节点和边之间的关系方法,如outEdges(node),incidentNodes(edge),edgesConnectiing(nodeU,nodeV)
network约束边天然支持平行边
network支持asGraph()方法返回Network的Graph view
Network<Airport,Flight> 这个network中的边表示特定的班次从一个机场到另一个机场
选择正确的图类型
这三个类型的区别在于边的表示不同
graph 类型 边在节点之间没有区别,没有自己的数据,每一个节点对之间最多通过一条边连接
,边也没有其他任何信息
ValueGraph类型中的边有值,值可以相同也可以不同,边的值可以附有不同的权重
Network ,节点的对象是唯一存在的
创建graph实例 --使用构造者的方式
例如
@Test
public void test01() {
MutableGraph<Integer> graph = GraphBuilder.undirected().build();
MutableValueGraph<City, Distance> roads = ValueGraphBuilder.directed().build();
MutableNetwork<Webpage, Link> webSnapshot = NetworkBuilder.directed()
.allowsParallelEdges(true)
.nodeOrder(ElementOrder.natural())
.expectedNodeCount(10000)
.expectedEdgeCount(1000000).build();
}
转载于:https://my.oschina.net/iioschina/blog/2967581
guava中 graphs 六相关推荐
- Guava中针对集合的 filter和过滤功能
Guava中针对集合的 filter和过滤功能 博客分类: JAVA相关 在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子: Java代码 ...
- 简单分析Guava中RateLimiter中的令牌桶算法的实现
为什么80%的码农都做不了架构师?>>> 令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法.典型情况下,令 ...
- 用java在画布中绘制六个随机英文字母
用java在画布中绘制六个随机英文字母,颜色,位置随机. package test; import java.awt.Canvas; import java.awt.Color; import jav ...
- Qt中动态显示六轴机械臂的STL三维模型
Qt中动态显示六轴机械臂的STL三维模型 运动仿真 STL模型 openGL显示STL ASCII格式的STL文件 读取STL文件 openGL中显示STL模型 运动学变换 两个坑 最终效果 运动仿真 ...
- 数字化转型过程中的六要素(5M1E):
数字化转型过程中的六要素为工厂生产运营的六大基本要素"人(Man),机(Machine),料(Material),法(Methode),环(Enviroment),测(Measurement ...
- cesium中轨道六根数的参数命名
cesium中轨道六根数的参数命名: Semimajor Axis(SMA) 半长轴:是椭圆长轴的一半.对于圆,也就是半径,另外根据开普勒第三定律,半长轴与运行周期之间有确定的换算关系. Eccent ...
- 《勋伯格和声学》读书笔记(七):结束与终止式,伪终止式,以及终止式中的六四和弦
前言 本文是<勋伯格和声学>中关于终止式的相关内容的笔记,良好的终止式能够明确地建立调性,并且给听者带来强烈的满足感. 对摇滚史密斯和独立电子感兴趣的朋友们,欢迎关注鄙人B站主页,感谢大家 ...
- 区块连中文书六本略读
区块连中文书六本 图说区块链 区块链革命 区块链社会 区块连-技术驱动社会 区块链-重溯经济与世界 ## 图说区块链 关键词 账本 价值 信用 技术 金融科技 分布式 价值转移 去中心化 信任共识 p ...
- java令牌桶_简单分析Guava中RateLimiter中的令牌桶算法的实现
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法.典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送. ...
最新文章
- 干货 | 一文教你如何快速高效阅读Paper(硕士生版)
- 物联网将在2018年实现大规模发展:以下是IBM的4大预测
- 性能计数器监控typeperf
- 201521123009《Java程序设计》第14周学习总结
- 教你如何谷歌浏览器免费打电话
- 阿里无人车,正在高速过弯
- NLP—1.自然语言处理的基础任务与应用
- 抖音视频如何去除水印
- 稳压二极管的原理,它有什么作用?
- 2022城市辅助驾驶赛道陷入“三国争霸”,数据智能助力毫末智行杀出重围?
- 亲自动手搭建微服务框架和测试环境-1-背景
- 利用Flowchart.fun快速可视化递归过程
- plex插件显示无服务器,deepin 15.11 安装plex和插件
- 电竞游戏电脑推荐,台式机R13性能破界
- 基于安卓手机使用Termux搭建web服务器教程
- 字符串转base64,base64转字符串
- 新车被撞折旧费贬值损失怎么算
- Windows 7远程桌面登录时崩溃
- 苹果神武4手游等待服务器响应,ios回合制手游《神武4》如何在登高探宝中快速拿到奖励?...
- python-web-下载所有xkcd漫画