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 六相关推荐

  1. Guava中针对集合的 filter和过滤功能

    Guava中针对集合的 filter和过滤功能 博客分类:  JAVA相关 在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子: Java代码   ...

  2. 简单分析Guava中RateLimiter中的令牌桶算法的实现

    为什么80%的码农都做不了架构师?>>>    令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法.典型情况下,令 ...

  3. 用java在画布中绘制六个随机英文字母

    用java在画布中绘制六个随机英文字母,颜色,位置随机. package test; import java.awt.Canvas; import java.awt.Color; import jav ...

  4. Qt中动态显示六轴机械臂的STL三维模型

    Qt中动态显示六轴机械臂的STL三维模型 运动仿真 STL模型 openGL显示STL ASCII格式的STL文件 读取STL文件 openGL中显示STL模型 运动学变换 两个坑 最终效果 运动仿真 ...

  5. 数字化转型过程中的六要素(5M1E):

    数字化转型过程中的六要素为工厂生产运营的六大基本要素"人(Man),机(Machine),料(Material),法(Methode),环(Enviroment),测(Measurement ...

  6. cesium中轨道六根数的参数命名

    cesium中轨道六根数的参数命名: Semimajor Axis(SMA) 半长轴:是椭圆长轴的一半.对于圆,也就是半径,另外根据开普勒第三定律,半长轴与运行周期之间有确定的换算关系. Eccent ...

  7. 《勋伯格和声学》读书笔记(七):结束与终止式,伪终止式,以及终止式中的六四和弦

    前言 本文是<勋伯格和声学>中关于终止式的相关内容的笔记,良好的终止式能够明确地建立调性,并且给听者带来强烈的满足感. 对摇滚史密斯和独立电子感兴趣的朋友们,欢迎关注鄙人B站主页,感谢大家 ...

  8. 区块连中文书六本略读

    区块连中文书六本 图说区块链 区块链革命 区块链社会 区块连-技术驱动社会 区块链-重溯经济与世界 ## 图说区块链 关键词 账本 价值 信用 技术 金融科技 分布式 价值转移 去中心化 信任共识 p ...

  9. java令牌桶_简单分析Guava中RateLimiter中的令牌桶算法的实现

    令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法.典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送. ...

最新文章

  1. 干货 | 一文教你如何快速高效阅读Paper(硕士生版)
  2. 物联网将在2018年实现大规模发展:以下是IBM的4大预测
  3. 性能计数器监控typeperf
  4. 201521123009《Java程序设计》第14周学习总结
  5. 教你如何谷歌浏览器免费打电话
  6. 阿里无人车,正在高速过弯
  7. NLP—1.自然语言处理的基础任务与应用
  8. 抖音视频如何去除水印
  9. 稳压二极管的原理,它有什么作用?
  10. 2022城市辅助驾驶赛道陷入“三国争霸”,数据智能助力毫末智行杀出重围?
  11. 亲自动手搭建微服务框架和测试环境-1-背景
  12. 利用Flowchart.fun快速可视化递归过程
  13. plex插件显示无服务器,deepin 15.11 安装plex和插件
  14. 电竞游戏电脑推荐,台式机R13性能破界
  15. 基于安卓手机使用Termux搭建web服务器教程
  16. 字符串转base64,base64转字符串
  17. 新车被撞折旧费贬值损失怎么算
  18. Windows 7远程桌面登录时崩溃
  19. 苹果神武4手游等待服务器响应,ios回合制手游《神武4》如何在登高探宝中快速拿到奖励?...
  20. python-web-下载所有xkcd漫画

热门文章

  1. AndroidUI的组成部分RoomButton
  2. CentOS下php安装mcrypt扩展
  3. ssas 为绑定指定的大小太小,导致一个或多个列值被截断
  4. 等价类划分方法的应用
  5. 深入Android 【一】 —— 序及开篇
  6. C#实现MVC模式简要方法(2)
  7. keepalived lvs
  8. Python面试必知(四)
  9. 上架过程中遇到的问题
  10. java中finally与return的测试方法