簡體   English   中英

通過WAN高效發送圖形數據結構

[英]Efficient sending graph data structure over WAN

我正在尋找一種通過WAN發送屬性圖的有效方法。 為了延遲和帶寬,我應該使其盡可能高效。 一種解決方案是對圖形數據結構進行序列化,然后將其以較小的塊大小通過套接字發送。 該方法可以以不同的方式實現。 可能最明顯的實現是在所有邊的三元組(頂點-邊-頂點)的序列化列表中發送圖,並在所有斷開的頂點中以序列化的頂點發送圖。 但是,很明顯,此解決方案效率不高,因為頂點可以多次發送並且會占用大量帶寬。

我知道可以使用鄰接表鄰接矩陣來傳輸圖數據結構,但是我無法弄清楚序列化和以這些形式通過WAN發送的方式。 如果有人可以為我提供有效的解決方案,我將不勝感激。

如果使用鄰接矩陣,由於必須指定n ^ 2個頂點連接(或缺少頂點連接),仍然會遇到不必要的數據發送的問題,因此,如果您的連接圖非常稀疏,則仍然必須在至少n ^ 2位信息。

一種僅使用n ^ 2位+ 1字節信息的簡單解決方案是隱式發送鄰接矩陣。

假設您有n個頂點。 1...n任意編號。 然后創建一個nxn鄰接矩陣A ,如果從頂點ij的邊存在,則A(i,j)==1 ,如果不存在這樣的連接,則創建0 如您所見,您僅需要n ^ 2位(而不是字節!)來指定鄰接矩陣。

然后以這種方式進行序列化:開始時使用1個字節(32位),即一個int來指定矩陣的大小( n )。 然后,接下來的n ^ 2位應該是您的鄰接矩陣。

若要反序列化,請讀取第一個字節以找出鄰接矩陣的大小,然后讀取邊緣連接的后n ^ 2位。

注意:盡管我在這里使用矩陣一詞來使它在概念上易於思考,但數據不必以矩陣方式顯式構造,而是可以線性方式存儲。 然后訪問第ij行,您只需執行A(i*n+j)

顯然,此解決方案僅發送圖結構,而不發送圖中包含的任何實際數據。 但是,我個人認為,即使需要發送圖形中包含的實際數據,這仍然是一個好主意,因為一旦有了圖形結構,就可以序列化其余數據,並在其上重構它。另外一端。

暫無
暫無

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

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