标签: graph-algorithm

O(V+E) 空间复杂度是什么意思?

时间复杂度,O(v+e)很明显它类似于在程序中单独运行的 2 个循环(e 次和 v 次)。

但是,当同样涉及空间复杂性时,我感到困惑。

是不是先分配O(v)空间,然后释放空间,再分配O(e)空间?

谢谢!

algorithm graph-algorithm

1
推荐指数
1
解决办法
1746
查看次数

未找到具有优先级队列的 Dijkstra 算法处理目的地吗?

我知道算法是如何工作的——但是当使用优先级队列试图找到无法找到的目标节点时,它似乎只会在循环中无休止地反弹。

Dijkstra 的算法是否处理节点与图中断开连接的情况?

algorithm graph-theory dijkstra graph-algorithm

1
推荐指数
1
解决办法
1236
查看次数

从边列表构造邻接表?

在图算法的上下文中,我们通常会得到一个方便的图表示形式(通常作为邻接列表或邻接矩阵)进行操作。

我的问题是,从给定的所有边列表构造邻接列表的有效方法是什么?

出于该问题的目的,假设边是元组列表(如在 python 中),并且 (a,b) 表示从 a 到 b的有向边。

graph graph-algorithm python-2.7

1
推荐指数
1
解决办法
3698
查看次数

Bellman-Ford 算法空间复杂度

我一直在搜索贝尔曼-福特算法的空间复杂度,但在维基百科贝尔曼-福特算法上,它说空间复杂度是 O(V)。在这个链接上它说 O(V^2) 。我的问题是;什么是真正的空间复杂度,为什么?

algorithm space-complexity graph-algorithm bellman-ford

1
推荐指数
1
解决办法
3283
查看次数

计算有向图平方的算法(以邻接表的形式表示)

我正在构建一种算法来计算作为邻接表形式的有向图的 G^2,其中 G^2 = (V,E'),其中 E' 定义为 (u,v)?E ? 如果 G 中的 u 和 v 之间有一条长度为 2 的路径。我很好地理解了这个问题,并找到了一个我认为是正确的算法,但是我的算法的运行时间是 O(VE^2),其中 V 是数字顶点数,E 是图的边数。我想知道如何在 O(VE) 时间内做到这一点,以使其更有效率?

这是我想出的算法:

在顶点的顶点
的邻居在邻居
的邻居对于n
如果(!N =邻居)
则─>如果(n.value ==邻居)
它添加到一个新的邻接表
中断; // 这意味着我们在顶点和邻居之间找到了一条大小为 2 的路径,
否则继续

algorithm graph graph-algorithm

1
推荐指数
1
解决办法
2225
查看次数

Tarjan 算法的非递归版本

我有以下 Tarjan 算法的(递归)实现来查找图中的强连通分量,并且它工作正常:

public class StronglyConnectedComponents
{
    public static List<List<int>> Search(Graph graph)
    {
        StronglyConnectedComponents scc = new StronglyConnectedComponents();
        return scc.Tarjan(graph);
    }

    private int preCount;
    private int[] low;
    private bool[] visited;
    private Graph graph;
    private List<List<int>> stronglyConnectedComponents = new List<List<int>>();
    private Stack<int> stack = new Stack<int>();

    public List<List<int>> Tarjan(Graph graph)
    {
        this.graph = graph;
        low = new int[graph.VertexCount];
        visited = new bool[graph.VertexCount];

        for (int v = 0; v < graph.VertexCount; v++) if (!visited[v]) DFS(v);

        return stronglyConnectedComponents;
    }

    public void DFS(int v) …
Run Code Online (Sandbox Code Playgroud)

c# algorithm graph-algorithm tarjans-algorithm

1
推荐指数
1
解决办法
1885
查看次数

在有向图中找到长度可被 3 整除的从 s 到 t 的步行

杰夫·埃里克森的讲义上的图形算法,有一个锻炼,以检查是否给定顶点之间的步行路程s,并t可以通过3有向图整除。

我的想法是在图上使用广度优先搜索来获取从s到 的所有路径t。如果简单路径的长度不能被 3 整除,则再次运行该算法以检查循环长度不能被 3 整除的位置st位置之间是否存在循环。但是,我觉得该方法非常低效。

如果您对这个问题有任何好的建议,那就太好了。

algorithm graph-theory graph-algorithm

1
推荐指数
1
解决办法
605
查看次数

Julia 中使用结构数据类型、指针和 this 的树和图问题

我想用 Julia 语言编写解决一些图/树问题。这是一些很好的例子。在C中是这样完成的:
Recursive C program for level order traversal of Binary Tree

#include <stdio.h>
#include <stdlib.h>

/* A binary tree node has data, pointer to left child
   and a pointer to right child */
struct node
{
    int data;
    struct node *left, *right;
};

/* Function prototypes */
void printGivenLevel(struct node* root, int level);
int height(struct node* node);
struct node* newNode(int data);

/* Function to print level order traversal a tree*/
void printLevelOrder(struct node* root)
{
    int h = …
Run Code Online (Sandbox Code Playgroud)

algorithm struct graph-algorithm data-structures julia

1
推荐指数
1
解决办法
790
查看次数

想得到以下图片填充算法的解决方案

问题陈述:编写一个算法来找到填充完整图片/桶所需的最大笔画数。约束:

  1. 一笔可以填充相邻的单元格(左、右、上、下),但不能填充对角线。
  2. 给定的是字符串列表,函数应返回填充完整图片/存储桶的最大笔画数的 int 值。

static int fillBucket(List<String> picture){}

 Sample Input: 
    1. picture = ["aaaba", "ababa",a"aaaca"],  Output: 5
    2. picture = ["bbba", "abba", "acaa", "aaac"], Output: 4
Run Code Online (Sandbox Code Playgroud)

存储桶应如何填充的示例: 图片

java algorithm graph-algorithm

1
推荐指数
1
解决办法
1499
查看次数

寻找通过顶点 u 和 v 的最小权重电路

我有一个无向且连通(不完整)的顶点图,其中uv可以是任意 2 个不同的顶点。我想构建从顶点u开始,经过v,然后返回到u 的最小权重电路,而不重复任何边。可以通过执行以下操作来完成吗?

  1. 找到从uv 的最短路径- 称之为p1

  2. 从图中删除p1的所有组成边

  3. 寻找从vu 的新最短路径- 称之为p2

  4. 将所有删除的边返回到图中,并将p1p2连接在一起 - 称之为c1

考虑到同时通过uv的约束,c1是可以构造的最小权重电路吗?如果是的话,我该如何证明,如果不是,为什么不呢?

这对我来说似乎很有意义,因为c1中包含的所有路径本身也是最短路径,但是我无法完全摆脱我可能会错过某些东西的感觉。

编辑:我已将“完全连接图”更改为“连接图”。“完全”意味着图表是完整的,这不是我的意思。

algorithm graph-theory graph-algorithm

1
推荐指数
1
解决办法
168
查看次数