日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

guava中 graphs 六

發(fā)布時間:2025/6/15 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 guava中 graphs 六 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

guava中 graphs 六

?

介紹

guava的common.graph 是一個圖類型結構的庫,也就是實體和他們之間的關系的工具類庫

?

比如包含網頁和超鏈接,科學家和他們的論文,航站和他們之間的通道,人們和他們呢之間的家族關系。目的是提供

一個共同的和可以擴展的語言能夠使用這些數據。

?

定義

圖包含了點的集合和邊的集合(也叫連接),每個邊連接使得節(jié)點能夠相互連接,邊進入的節(jié)點叫做端點

?

一個邊是有方向的如果定義了一個起點和一個結束點,有方向的邊適合不對稱的結構模型

無方向的邊適合有對稱關系的數據模型;

?

有向的圖它的邊是有向的,無向圖它的邊是無向的

?

例子

graph.addEdege(nodeU,ndeV,edgeUV)

?

nodeU和nodeV是相鄰的

edgeUV 是附屬于節(jié)點nodeU和nodeV

?

如果一個圖是有向的,那么

nodeU是nodeV的前邊的節(jié)點

nodeV是nodeU后面的節(jié)點

edgeUV是nodeU的向外的出去邊

edgeUV是nodeV的進入的邊

nodeU是 edgeUV的起始邊

nodeV是edgeUV的終止邊

如何一個圖是無向圖,那么

nodeU既是nodeV的前驅后繼

nodeV是nodeU的前驅后繼

edgeUV是nodeU的出邊也是入邊

edgeUV是nodeV的出邊和入邊

?

?

這些都是關于一個圖

循環(huán)圖是圖的起點和終點都是同一個點,如果是循環(huán)有向圖,他的出邊和入邊都是附屬節(jié)點,附屬節(jié)點既是起點也是終點

兩個邊是平行的如果連接的是相同的點,并且有相同的順序,反平行邊是有相同的節(jié)點但是是相反的順序

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支持以下幾種類型:

有向圖

非有向圖

節(jié)點

循環(huán)圖

平行非平行邊

有序無序節(jié)點

?

Graph types

有三個最常用的圖接口,通過邊的不同來區(qū)分 Graph,ValueGraph,Network,他們是對等關系,之間不會有等級區(qū)分

這些接口都結成了 SuccessorFunction 和 PredecessorsFunction

這些接口被當作訪問successors和predecessors方法的入參,圖的使用者已經有一個view,并不想去序列化view到common.graph,只是想在一個圖的算法中使用,這種場景就很實用

Graph

是一個最簡單和基礎的圖類型,定義了處理節(jié)點之間低頻地操作,如successors(node),adjacentNodes(node),

inDegree(node),它的節(jié)點是第一個類單獨的獨享,他們和map中的key類似。

圖graph的邊完全是匿名的,他們僅僅在端點定義

Graph<Airport> 這個圖中的邊表示連接兩個機場的一個航班

ValueGraph

ValueGraph 有所有Graph的方法,同時添加了找回特定邊值的方法

valueGraph的邊都有用戶初始化的特殊值,這些值不需要唯一,Graph和ValueGraph的關系與map和set的關系類似

graph的邊是節(jié)點對的集合,valuegraph的邊是短點和值的映射。

ValueGraph 提供了asGraph()方法返回Graph的view,能夠使用graph實例的方法

ValueGraph<Airport,Integer>這個值代表著往返兩個機場需要的時間

?

Network

Network有和Graph相關的所有方法,添加了邊和節(jié)點和邊之間的關系方法,如outEdges(node),incidentNodes(edge),edgesConnectiing(nodeU,nodeV)

network約束邊天然支持平行邊

network支持asGraph()方法返回Network的Graph view

Network<Airport,Flight> 這個network中的邊表示特定的班次從一個機場到另一個機場

?

?

選擇正確的圖類型

?

這三個類型的區(qū)別在于邊的表示不同

graph 類型 邊在節(jié)點之間沒有區(qū)別,沒有自己的數據,每一個節(jié)點對之間最多通過一條邊連接

,邊也沒有其他任何信息

ValueGraph類型中的邊有值,值可以相同也可以不同,邊的值可以附有不同的權重

Network ,節(jié)點的對象是唯一存在的

?

創(chuàng)建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 六的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。