图形表示-链接列表的链接列表

时间:2018-07-26 12:34:15

标签: c data-structures graph adjacency-list

我知道,邻接列表是一种使用链接列表数组表示图的常见数据结构。我正在为C中的简单搜索引擎实现反向索引,并打算使用邻接表。但是,我发现使用邻接表的一个缺点是,如果您不知道倒排索引中将包含多少个单词,则必须假设索引中包含任意多的单词(数组元素)以创建邻接表。这可能会导致使用过多的内存。这不是一个大问题,但我想知道是否有更好的方法来实现它。

我当时想解决此问题的一种方法是创建一个链表的链表来代替我的反向索引。我还没有看到链接列表图形表示形式的链接列表的许多示例,因此我假设这是不常用或常规的表示形式。我想知道通常使用链表的链表来表示图是否合适?还是坚持使用邻接表更好?任何见解将不胜感激。

1 个答案:

答案 0 :(得分:1)

两种方法都需要权衡。

您可以使用邻接表而无需使用额外的内存,但是,每次插入和删除操作都将花费O(| V |)时间。

例如,如果您第一次添加顶点时将数组的长度加倍,那么每次将顶点计数加倍时,它只会花费O(| V |)次。但是,使用这种方法几乎总是会占用额外的内存。

如果选择用LinkedLists的LinkedList表示图,则确实可以优化内存,但要在较大的性能上进行权衡。查找给定节点的邻居的时间从O(| E |)到O(| V || E |)时间,这消除了邻接表的最大优势之一。

如果您想执行更高级的操作(如遍历图形),则性能成本将非常低效。对于顶点的每个邻居,您都必须重新遍历节点LinkedList才能找到邻居的顶点。

相关问题