Hash 对于一个非常大的图,您将使用哪种数据结构来存储指向邻接链表的指针?

Hash 对于一个非常大的图,您将使用哪种数据结构来存储指向邻接链表的指针?,hash,graph,Hash,Graph,假设您想要实现一个可以有百万个节点的图。但是节点数将从0增加到百万。不确定它是否会达到百万大关。它也可能穿过它到数百万个节点 我知道邻接列表就是用来做这件事的。但是一个典型的邻接列表有一个数据结构来维护指向链表的指针 那么应该使用什么数据结构来存储指向邻接列表的指针 比如说Facebook,它拥有数百万用户。假设每个用户代表一个节点。现在,所有用户都被表示为一个非常大的单一图形的节点,您想对其执行操作—您将如何存储它?如果您了解它们背后的基本知识,应该不会太难 通常,您创建一个名为“bucket

假设您想要实现一个可以有百万个节点的图。但是节点数将从0增加到百万。不确定它是否会达到百万大关。它也可能穿过它到数百万个节点

我知道邻接列表就是用来做这件事的。但是一个典型的邻接列表有一个数据结构来维护指向链表的指针

那么应该使用什么数据结构来存储指向邻接列表的指针


比如说Facebook,它拥有数百万用户。假设每个用户代表一个节点。现在,所有用户都被表示为一个非常大的单一图形的节点,您想对其执行操作—您将如何存储它?

如果您了解它们背后的基本知识,应该不会太难

通常,您创建一个名为“bucket”的数组,其中包含键和值,并带有一个可选指针来创建链接列表

当您使用键访问哈希表时,您将使用一个自定义哈希函数处理该键,该函数将返回一个整数。然后取结果的模,即数组索引或“bucket”的位置。然后将未保存的密钥与存储的密钥进行检查,如果匹配,则找到正确的位置

否则,您将发生“冲突”,必须爬过链接列表并比较关键点,直到匹配为止。(注意,一些实现使用二叉树而不是链表进行冲突)

查看此快速哈希表实现:


丢弃任何你读到的告诉你“散列通常有一个非常大的数组”的材料,这是完全错误的。此外,您正在将典型的图结构与哈希结构混合。重新思考您的问题并重新编写问题。@mmgp:完成,请现在回答。您仍然感到困惑:/adjacence list是定义哪些顶点与给定顶点相邻的一种方法。如果图形密集,则没有理由使用邻接列表。这也不是您正在描述的问题,即如何正确存储大型图形。这里有几个关于这个的问题,也有很多关于这个的文本。你的问题太公开了;研究并重新提问。@mmgp,我知道。图的密度不是问题。如果使用邻接列表和矩阵存储的节点数量太多怎么办。这个问题到底出了什么问题?如果你不知道答案,就不要投反对票。