我如何计算此代码的时间复杂度?
How do I calculate this code's time complexity?
我正在努力计算这段代码的时间复杂度。
目前只能编写简单的代码...
只想尝试复杂的!
public static int PATHWAY = 0;
public static int WALL = 1;
public static int MARKED = 2;
public static boolean find(int x, int y) {
if(x == 7 && y == 7) return true;
maze[x][y] = MARKED;
if(x != 0 && maze[x-1][y] == PATHWAY && find(x-1, y)) return true;
if(y != 0 && maze[x][y-1] == PATHWAY && find(x, y-1)) return true;
if(x != 7 && maze[x+1][y] == PATHWAY && find(x+1, y)) return true;
if(y != 7 && maze[x][y+1] == PATHWAY && find(x, y+1)) return true;
return false;
}
基本上你可以计算赋值和操作。
有一个
int assignments = 0;
int operations = 0;
每做一次就会递增。
另一种方法是监视时间,但这不是最可靠的方法。
你也可以calculate/approximate大O,勾选Big O, how do you calculate/approximate it?
嗯,在每个递归调用中,您访问二维数组中的单个单元格。
由于标记了访问过的单元格,所以不能访问同一个单元格两次。
因此,总的递归调用受二维数组长度的限制。
除了递归调用之外,您在每次执行 find()
方法时执行的工作量是恒定的。
因此,如果 N
是二维数组的行数,M
是二维数组的列数,那么时间复杂度是 O(N*M)
。
当然,根据你if(x == 7 && y == 7) return true;
的停止条件,你的二维数组的维度好像是8x8,可以看成一个常数。这将使 运行 时间为 O(1)。
O(N*M)
是一般输入数组的复杂度。
嗯,这并不难,它实际上使用 DFS 来找到路径。 DFS的阶数是O(V+E)
,其中V
是顶点数,E
是边数。
在这种情况下,您使用邻接矩阵来表示您的图形。所以在最坏的情况下,时间复杂度为 O(M*N)
,其中 M
是行数,N
是列数。
我正在努力计算这段代码的时间复杂度。 目前只能编写简单的代码... 只想尝试复杂的!
public static int PATHWAY = 0;
public static int WALL = 1;
public static int MARKED = 2;
public static boolean find(int x, int y) {
if(x == 7 && y == 7) return true;
maze[x][y] = MARKED;
if(x != 0 && maze[x-1][y] == PATHWAY && find(x-1, y)) return true;
if(y != 0 && maze[x][y-1] == PATHWAY && find(x, y-1)) return true;
if(x != 7 && maze[x+1][y] == PATHWAY && find(x+1, y)) return true;
if(y != 7 && maze[x][y+1] == PATHWAY && find(x, y+1)) return true;
return false;
}
基本上你可以计算赋值和操作。 有一个
int assignments = 0;
int operations = 0;
每做一次就会递增。
另一种方法是监视时间,但这不是最可靠的方法。
你也可以calculate/approximate大O,勾选Big O, how do you calculate/approximate it?
嗯,在每个递归调用中,您访问二维数组中的单个单元格。
由于标记了访问过的单元格,所以不能访问同一个单元格两次。
因此,总的递归调用受二维数组长度的限制。
除了递归调用之外,您在每次执行 find()
方法时执行的工作量是恒定的。
因此,如果 N
是二维数组的行数,M
是二维数组的列数,那么时间复杂度是 O(N*M)
。
当然,根据你if(x == 7 && y == 7) return true;
的停止条件,你的二维数组的维度好像是8x8,可以看成一个常数。这将使 运行 时间为 O(1)。
O(N*M)
是一般输入数组的复杂度。
嗯,这并不难,它实际上使用 DFS 来找到路径。 DFS的阶数是O(V+E)
,其中V
是顶点数,E
是边数。
在这种情况下,您使用邻接矩阵来表示您的图形。所以在最坏的情况下,时间复杂度为 O(M*N)
,其中 M
是行数,N
是列数。