通过 WAN 高效发送图形数据结构



我正在寻找一种通过WAN发送属性图的有效方法。为了延迟和带宽,我应该使其尽可能高效。一种解决方案是序列化图形数据结构,并通过套接字以较小大小的块发送该结构。这种方法可以通过不同的方式实施。可能最明显的实现是在序列化列表中为所有边发送三重(顶点-边-顶点)和为所有断开连接的顶点发送序列化顶点的图形。但是,很明显,此解决方案效率不高,因为顶点可以多次发送并且会使用大量带宽。

我知道图形数据结构可以使用邻接列表邻接矩阵进行传输,但我无法弄清楚序列化并以这些形式通过 WAN 发送的方式。如果有人能帮助我提供有效的解决方案,我将不胜感激。

如果你使用邻接矩阵,你仍然会遇到发送不需要的数据的问题,因为你必须指定n^2个顶点连接(或缺乏顶点连接),所以如果你有一个非常稀疏连接的图,你仍然需要发送至少n^2位的信息。

仅使用 n^2 位 + 1 字节信息的一种简单解决方案是隐式发送邻接矩阵。

假设您有n顶点。从1...n中任意编号。然后创建一个n x n邻接矩阵A其中A(i,j)==1从顶点ij是否存在边,如果不存在此类连接,则0。如您所见,您只需要 n^2 位(不是字节!)来指定邻接矩阵。

然后以这种方式序列化:开始时使用 1 字节(32 位),即指定矩阵大小的intn )。那么接下来的 n^2 位应该是你的邻接矩阵。

要反序列化,请读取第一个字节以计算邻接矩阵的大小,然后读取边缘连接的下一个 n^2 位。

注意:尽管我在这里使用术语矩阵是为了在概念上易于思考,但数据不需要以矩阵方式显式结构化,但可以以线性方式存储。然后,要访问第 ij,您只需执行A(i*n+j) .

显然,此解决方案仅发送图形结构,而不发送图形中包含的任何实际数据。但是,我个人认为,即使您需要发送图形中包含的实际数据,这仍然是一个好主意,因为一旦您拥有了图形结构,您就可以根据需要序列化其余数据并在另一端重建它。

最新更新