Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定多重图的邻接表,计算O(| V |和| x2B;| E |)时间内等价(简单)无向图的邻接表_Algorithm_Graph_Adjacency List - Fatal编程技术网

Algorithm 给定多重图的邻接表,计算O(| V |和| x2B;| E |)时间内等价(简单)无向图的邻接表

Algorithm 给定多重图的邻接表,计算O(| V |和| x2B;| E |)时间内等价(简单)无向图的邻接表,algorithm,graph,adjacency-list,Algorithm,Graph,Adjacency List,给出了多重图的邻接表G=(V,E),需要找到一个O(V+E)算法来计算等价(简单)无向图的邻接表 我在另一篇文章中找到了以下解决方案(这是问题部分的一部分,因此我重新发布): [H]保留大小为| V |的数组,以便标记在adj[u]中至少遇到过一次的顶点,从而防止重复。在遍历每个adj[u]之前,该数组将重置 请原谅我的无知,但我不确定这是怎么回事。重置长度| V |数组| V |次的成本是多少 谢谢。您不需要实际重置阵列 假设数组存储int。顶点标记为iffmark[u]==v,其中v是当前顶

给出了多重图的邻接表G=(V,E),需要找到一个O(V+E)算法来计算等价(简单)无向图的邻接表

我在另一篇文章中找到了以下解决方案(这是问题部分的一部分,因此我重新发布):

[H]保留大小为| V |的数组,以便标记在adj[u]中至少遇到过一次的顶点,从而防止重复。在遍历每个adj[u]之前,该数组将重置

请原谅我的无知,但我不确定这是怎么回事。重置长度| V |数组| V |次的成本是多少


谢谢。

您不需要实际重置阵列

假设数组存储int。顶点标记为iff
mark[u]==v
,其中
v
是当前顶点的索引或id


当你移动到下一个顶点时,代码> v>代码>的值会发生变化,数组中的所有条目都会被评估为false,而不必改变数组中的值。从分配新内存到删除旧内存,用0覆盖每个值到忽略旧值并开始在0处写入,都可以。引用缺乏上下文来判断这一点。运行时复杂性的主要问题是,它高度依赖于测量的内容(通常是最昂贵的操作,但这在这里相当模糊)。你能想出任何能满足复杂性要求的“重置”解释吗?我不认为我们可以忽略旧的值……如果你保留一个已设置顶点的列表,那么你可以只重置那些数组位置,因此未设置的成本不超过集合,你可以将它们视为集合成本的常数因子。另一种方法是在数组中设置一个位置,将其设置为整数值,并在每次遍历时增加该整数值,将设置为小于当前值的任何位置视为未设置。@tarski在时间复杂度上存在相当多的歧义。例如,可以考虑堆内存分配为<代码> O(1)< /代码>。在这种情况下,只需重新分配数组就足以满足运行时要求。@mcdowella,第一种方法是有意义的。非常感谢。第二个不起作用,至少不只是增加一个计数器,因为在第二次通过时(考虑列表中第二个v的adj[v]),如果节点u的计数器读数为1,我们将不知道这是第一次还是第二次。谢谢,这是有意义的。