JUNG 计算图属性,中心度,偏心率,直径,半径

本文介绍利用Java的第三方API JUNG 计算图中:

closeness centrality;// 图中某节点的 接近中心性/亲密中心性

betweenness centrality;// 图中某节点的 中介中心性/介数中心性

distance;  // 图中两节点的最短距离

eccentricity;  // 图中某节点的 偏心率/离心率

radius;   //  半径

diameter.  // 直径

 


 

JUNG 下载地址

 

https://sourceforge.net/projects/jung/files/

 

JUNG api参考文档:

http://jung.sourceforge.net/doc/api/overview-summary.html


 

预处理

JUNG 中的计算方法基于JUNG内置图类,本文基于自定义图计算图属性,故需要先将自定义图转存为JUNG图对象。

JUNG 提供 泛型接口,进行转化或创建时利用自定义边类型与节点类型即可。

以以下代码为例:

/*** 将graph.Graph 转为 JUNG.graph.Graph 过滤掉超边.* * @param g - 基于 graph.Graph* @return edu.uci.ics.jung.graph.Graph*/public static edu.uci.ics.jung.graph.Graph<Vertex, Edge> graphTransform(Graph<Vertex, Edge> g) {edu.uci.ics.jung.graph.Graph<Vertex, Edge> graph = new SparseGraph<>(); // 稀疏图for (Vertex vertex : g.vertices()) {graph.addVertex(vertex);}for (Edge edge : g.edges()) {if (edge.sourceVertices().size() == 0) {// 超边continue;}if (edge.sourceVertices().size() == 1) {// 有向边
                graph.addEdge(edge, getVertex(edge.sourceVertices()),getVertex(edge.targetVertices()), EdgeType.DIRECTED);} else {// 无向边Vertex existV = getVertex(edge.vertices());graph.addEdge(edge, existV, getVertexExcept(edge.vertices(), existV),EdgeType.UNDIRECTED);}}return graph;}

如此,获得一个jung 图对象。

 

 


 

Closeness Centrality

 

/*** 计算图g中节点v的 closeness centrality.* * @param g - to be calculate.* @param v - central vertex.* @return closeness centrality.*/public static double closenessCentrality(Graph<Vertex, Edge> g, Vertex v) {edu.uci.ics.jung.graph.Graph<Vertex, Edge> graph = helper.Transformer.graphTransform(g);// 新建计算对象,传入图与待计算节点。ClosenessCentrality<Vertex, Edge> closenessCentrality = new ClosenessCentrality<>(graph, t);// 获得 closeness centrality.double degree =  closenessCentrality.getVertexScore(v);return degree;}

 


 

 

Betweenness Centrality

 

/*** 计算图g中节点v的 betweenness centrality.* * @param g - to be calculate.* @param v - central vertex. ** @return betweeness centrality.*/public static double betweennessCentrality(Graph<Vertex, Edge> g, Vertex v) {edu.uci.ics.jung.graph.Graph<Vertex, Edge> graph = helper.Transformer.graphTransform(g);// 新建计算对象,传入图与待计算节点。BetweennessCentrality<Vertex, Edge> betweennessCentrality =new BetweennessCentrality<>(graph, t);// 获得 betweenness centrality.double degree = betweennessCentrality.getVertexScore(v);return degree;}

 


 

 

Distance (Dijkstra算法)

 

 

/*** 节点start和end之间的最短距离(需要区分有向图和无向图).* * @param g - to be calculated in.* @param start - from.* @param end - to.* @return distance.*/public static double distance(Graph<Vertex, Edge> g, Vertex start, Vertex end) {edu.uci.ics.jung.graph.Graph<Vertex, Edge> graph = helper.Transformer.graphTransform(g);DijkstraShortestPath<Vertex, Edge> dijkstraShortestPath =new DijkstraShortestPath<>(graph, t);// 计算由start到end的最短路径,返回值为路径上的边组List<Edge> path = dijkstraShortestPath.getPath(start, end);// 统计总权值double distance = 0;for (Edge edge : path) {distance += edge.getWeight();}return distance;}

 

 

 

 


 

 

Eccentricity

在图论中,顶点v偏心率(eccentricity),用来表示连接图G中的顶点v到图G中其它顶点之间的最大距离。

 

 /*** 偏心率.* * @param g - to be calculated.* @param v - central vertex.* @return eccentricity of the specific vertex.*/public static double eccentricity(Graph<Vertex, Edge> g, Vertex v) {double eccentricity = 0;for (Vertex end : g.vertices()) {// 跳过 v 自身if (v.equals(end)) {continue;}// 计算 distance 并记录最远距离double distance = distance(g, v, end);if (distance > eccentricity) {eccentricity = distance;}}return eccentricity;}

 

 

 

 


 

Radius

在图论中,半径(radius)表示图的所有点的偏心率的最小值。

 

/*** 半径,即偏心率的最小值.* * @param g - to be calculated.* @return*/public static double radius(Graph<Vertex, Edge> g) {double radius = 2 ^ 10; // 初始极大值// 遍历节点计算偏心率,记录偏心率最小值for (Vertex vertex : g.vertices()) {double distance = eccentricity(g, vertex);if (radius > distance && distance > 0) {radius = distance;}}return radius;}

 

 

 

 


 

Diameter

在图论中,图的直径(diameter),表示取遍图的所有顶点,得到的偏心率的最大值。

 

 

/*** 直径,即偏心率的最大值.* * @param g - to be calculated.* @return*/public static double diameter(Graph<Vertex, Edge> g) {double diameter = 0;// 遍历节点计算偏心率,记录偏心率最大值for (Vertex vertex : g.vertices()) {double distance = eccentricity(g, vertex);if (diameter < distance) {diameter = distance;}}return diameter;}

 

 

 

 

转载于:https://www.cnblogs.com/standingby/p/9148165.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java VM –提防YoungGen空间

您可能从我们以前的面向性能的文章中看到&#xff0c;健康的JVM是实现最佳应用程序性能和稳定性的最重要目标之一。 这样的健康评估通常仅关注主要收集的频率&#xff08;避免&#xff09;或检测内存泄漏的存在。 年轻一代空间或短寿命物体的大小和足迹如何&#xff1f; 本文…

小程序绘图工具painter-json文件绘制保存分享图-可点击任意元素触发函数

Painter是由酷家乐移动前端团队打造的一款小程序绘图组件。 原项目地址&#xff1a;https://github.com/Kujiale-Mobile/Painter 新版地址&#xff1a;https://github.com/shesw/Painter 这款交互版原来是为了针对业务中的新需求而由我自己开发的&#xff0c;后来需求改动&a…

4 张动图解释为什么(什么时候)使用 Redux

dev-reading/fe 是一个阅读、导读、速读的 repo&#xff0c;不要依赖于 dev-reading/fe 学习知识。本 repo 只是一个快速了解文章内容的工具&#xff0c;并不提供全文解读和翻译。你可以通过本平台快速了解文章里面的内容&#xff0c;找到感兴趣的文章&#xff0c;然后去阅读全…

您正在使用什么垃圾收集器?

我们的研究实验室正全速前进。 随着最近的资金注入 &#xff0c;我们只能保证我们不断创新的步伐只会加快。 我们进行的部分研究与GC优化有关。 在处理这个有趣领域中的问题时&#xff0c;我们认为可以分享一些有关GC算法使用的见解。 为此&#xff0c;我们对使用特定GC算法的…

前端布局推进剂 - 间距规范化

我是一个爱折腾设计的前端&#xff0c;一直都在标榜自己的页面还原是多么的牛 X 。怎么做到页面还原&#xff1f;我有一个最笨但是有效的方法&#xff0c;就是把设计稿直接存成图片&#xff0c;作为背景图然后临摹着设计稿进行开发。我觉得自己太有才了。像素级还原有没有&…

echarts折线图相关

optionJKDLine {  title: {text: 告警数量趋势图,textStyle:{  //标题样式fontStyle:normal,fontFamily:sans-serif,fontSize:12    }},tooltip: {trigger: axis},legend: {  //图例,默认显示},grid: {  //图表距离left: -3%,right: 5%,bottom: 3%,top:20%,contai…

一个关于fixed抖动的小bug

前言 大家都知道position: fixed用于生成绝对定位的元素&#xff0c;相对于浏览器窗口进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 突然发现自己之前写的网页有个小bug&#xff1a;在购买页面的…

腾讯Node.js基础设施TSW正式开源

经过六年的迭代与沉淀&#xff0c;腾讯Tencent Server Web (以下简称TSW)这一公司级运维组件于今日正式开源。TSW是面向WEB前端开发者&#xff0c;以提升问题定位效率为初衷&#xff0c;提供云抓包、全息日志和异常发现的Node.js基础设施。TSW每天为百亿次请求提供稳定服务&…

ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.2,使用注释的方式来生成)...

摘要&#xff1a; Android中对SQLite数据库使用&#xff0c;是一件非常频繁的事情。现今&#xff0c;也有非常多的SQLite处理的开源框架&#xff0c;其中最著名的greenDao&#xff0c;它以占用资源少&#xff0c;处理效率高等特点&#xff0c;成为优秀的ORM框架之一。那么对于g…

配置MySQL以进行ADF开发

大家好。 今天&#xff0c;我将向您展示如何为Oracle ADF开发配置MySQL数据库。 恕我直言&#xff0c;当您将ADF与其他数据库而不是Oracle DB一起使用时&#xff0c;您将无法使用Oracle ADF的全部功能&#xff0c;有时您会发现自己正在寻找解决方法&#xff0c;以实现某些行为…

React Native面试知识点

本文原创首发于公众号&#xff1a;ReactNative开发圈&#xff0c;转载需注明出处。 本文会不定期不断更新&#xff0c;想查看最新版本请移步至https://github.com/forrest23/react-native-interview 1.React Native相对于原生的ios和Android有哪些优势&#xff1f; 1.性能媲美…

KIE-WB / JBPM控制台Ng –配置

大家好&#xff0c;这是我上一篇文章中有关如何使用jBPM Console的后续文章 。 这篇文章的主要思想是描述为了在您自己的公司中使用它&#xff0c;您需要对jBPM Console NG进行一些最常见的配置。 但是在讨论技术细节之前&#xff0c;我们将介绍KIE Workbench&#xff08;KIE-W…

自己写一个H5项目CI系统

持续集成&#xff08;Continuous integration&#xff0c;简称CI)系统在软件自动化构建&#xff08;包括编译、发布、自动化测试&#xff09;方面有着重要的作用&#xff0c;在之前&#xff0c;前端项目简单&#xff0c;很多时候发布都只是一些简单的拷贝&#xff0c;而随着web…

25.QT-模型视图

模型视图设计模式的核心思想 使模型(数据)与视图(显示)相分离模型只需要对外提供标准接口存取数据,无需数据如何显示视图只需要自定义数据的显示方式,无需数据如何组织存储当数据发生改变时,会通过信号通知视图当用户与视图进行交互时,会通过信号向模型发送交互信息 在QT中提供…

休眠事实:多级访存

在多个级别上检索根实体及其子关联是很常见的。 在我们的示例中&#xff0c;我们需要加载一个包含其树&#xff0c;分支和叶子的森林&#xff0c;并且我们将尝试查看Hibernate对于三种集合类型的行为&#xff1a;集合&#xff0c;索引列表和包。 这是我们的类层次结构的样子&…

前5个有用的隐藏Eclipse功能

Eclipse是野兽。 仅凭其力量才能超越其神秘感的设备。 有人将其称为连续体跨功能器 。 其他人则称它为透湿器 。 是的&#xff0c;它是如此之大&#xff0c;需要花费数年才能掌握。 然后&#xff0c;您的经理出现并告诉您&#xff1a;我们正在使用NetBeans。 开玩笑。 除了Ada…

linux如何解除密码,如何在Linux下解除PDF文件的密码?

【51CTO.com快译】今天&#xff0c;我碰巧与一位朋友共享一个受密码保护的PDF文件。我知道该PDF文件的密码&#xff0c;但不想透露。相反&#xff0c;我只想解除密码&#xff0c;将文件发送给朋友。于是我开始在网上找一些简单的方法&#xff0c;好解除PDF文件的密码保护。上网…

C#中结构体定义并转换字节数组

ref: https://www.cnblogs.com/dafanjoy/p/7818126.html C#中结构体定义并转换字节数组 最近的项目在做socket通信报文解析的时候&#xff0c;用到了结构体与字节数组的转换&#xff1b;由于客户端采用C开发&#xff0c;服务端采用C#开发&#xff0c;所以双方必须保证各自定义结…

2018移动端页面适配-自适应最新方案直接写px--------通过gulp工作流搭建一体化的移动端开发环境

1.开始 在flexible的GitHub上面写着 由于viewport单位得到众多浏览器的兼容&#xff0c;lib-flexible这个过渡方案已经可以放弃使用&#xff0c;不管是现在的版本还是以前的版本&#xff0c;都存有一定的问题。建议大家开始使用viewport来替代此方案。vw的兼容方案可以参阅《如…

jclouds的命令行界面

序幕 我使用和为jclouds贡献了一年多的时间。 到目前为止&#xff0c;我已经在很多领域广泛使用了它&#xff0c;尤其是在Fuse生态系统中 。 它的强大之处在于它缺少一件事&#xff0c;该工具可用于管理jclouds也提供访问权限的任何云提供商。 类似于EC2命令之类的工具&#xf…