簡體   English   中英

加權單向圖的頂點表示

[英]Vertex representation of a weighted unidirectional graph

我正在使用鄰接矩陣來表示我的加權單向大圖的所有頂點。 在此圖中,沒有邊將頂點連接到自身。 這使得我的鄰接矩陣的所有對角線元素為null 由於我的圖很大,所以在鄰接矩陣中我不需要在左三角形中保存任何元素。 下面是一個帶有鄰接矩陣的小樣本圖。這是帶有鄰接矩陣的樣本小圖

在單向圖中,左三角形只是直角三角形的鏡像。 adjacency_matrix[i][j] , adjacency_matrix[j][i]是一樣的。 那么為什么要存儲左三角形。 對於一個大圖,這個技巧可以節省這么多 memory。同時對角線元素也為零,因為沒有邊將頂點連接到自身。 adjacency_matrix[i][i]為零。 但是我該如何實現呢? 這里可以使用二維數組嗎?

Java 並沒有真正的 2D arrays,盡管有用於分配 arrays 數組的語法糖。

你可能只想:

int[][] weight = new int[N][];
for (int i = 0; i < N; i++) weight[i] = new int[N-1-i];

這將分配你想要的三角形。 然后只索引行 r,col c at weight[r][cr-1]。

另一種選擇是只使用一個數組

int[] weight = new int[N*(N-1)/2];

索引計算起來可能有點復雜,但分配和指針開銷更少。

您可以使用鋸齒狀數組。

int[][] matrix = new int[N][];
for (int i = 1; i <= N; i++) {
   matrix[i] = new int[N - i + 1];
   for (int j = 1; j <= N - i + 1; j++)
       matrix[i][j] = edgeValue;
}

基本上,您根據需要為每一行分配。

PS 也許我在這里搞砸了一些界限,但你仍然應該明白要點:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM