【发布时间】:2021-06-07 20:36:50
【问题描述】:
如果听起来太不合逻辑,请道歉。
今天在解决一些竞争性问题时,我突然想到了一个奇怪的想法。
我们说 DFS 的时间复杂度是 O(V+E),因为我们只遍历邻接表一次,即对于我们考虑其边的每个节点。
但是,当对大小为 MN 的矩阵执行 dfs 时。 我们可以说一个矩阵是一个具有 MN 个顶点的图(每个单元格都是一个顶点),并且它的相邻单元格有一条边 ==> 每个顶点都有 4 条边(为简单起见,让我们忽略边界情况)
然后当我们做 DFS 时
private void dfs(int grid[][], int i, int j, int m, int n) {
if(i<0 || j<0 || i>m || j>n || visited[i][j])
return;
visited[i][j] = true;
dfs(grid, i+1, j, m, n);
dfs(grid, i-1, j, m, n);
dfs(grid, i, j-1, m, n);
dfs(grid, i, j+1, m, n)
visited[i][j] = false;
}
==> 在图形术语中它的 O(V+E) => O(MN + 4MN) => O(5MN) => O(MN) ==> 但是时间复杂度是 4^(MN)
这个比喻哪里错了?
【问题讨论】:
标签: algorithm time-complexity depth-first-search backtracking