我正在使用一个非常大的无向图(公司的电子邮件网络)。
我对选择电子邮件网络的最佳和合适的无向图技术感到有点困惑。在该网络中,顶点表示电子邮件地址,边表示在两个地址之间的一个方向上至少有一封电子邮件。
有没有人知道最好的技术来表示算法?
我正在使用邮件的大型无向图,那么哪种表示法更好呢?邻接表还是邻接矩阵?
发布于 2018-01-22 06:22:28
这取决于相互发送电子邮件的人数以及在图上完成的操作。
如果有两个人互相发送电子邮件的可能性很高,那么你应该使用邻接矩阵。
另一方面,如果边的数量(2个人至少相互发送一个)与电子邮件地址的数量相比很小,你应该使用邻接列表。
另一件要看的事情是你在图表上做的是什么类型的操作。
因此,如果大多数操作包括查询两个节点之间是否有边,那么邻接矩阵将是最佳选择。
另一方面,如果大多数操作是遍历图或查询连接到给定节点的节点列表,则邻接表将更好。
如果您混合使用这两种类型的查询,则可以将图表示为哈希表的数组。因此,它将是使用哈希表而不是列表的邻接表表示。
更新
请检查此question的答案。它们详细解释了邻接表和邻接矩阵之间的区别。
为了找出的边数
我会运行一个程序来计算边数。它看起来如下所示:
mp = hash_table
for email in emails
   if !mp[email.sender][email.receiver]
       mp.insert({email.sender, email.receiver})
   end
end
return mp.size如果你真的想要找到确切的边数,你可以分割电子邮件,其中每个分段由相同发送者的电子邮件组成,并在每个分段上运行上述程序,那么最终答案将是结果的总和
发布于 2018-01-23 14:46:44
应该使用邻接矩阵还是邻接列表取决于图的密度。表示公司电子邮件网络的图通常是稀疏的,因为只有一小部分员工需要相互发送邮件。例如,你不会给与你不在同一个部门的人发邮件。因此,您可以使用邻接表。
https://stackoverflow.com/questions/48371946
复制相似问题