我正在用这段代码来计算时间复杂度。 目前只能使用简单的代码... 只想尝试复杂的一个!
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;
}
答案 0 :(得分:0)
基本上,您可以计算分配和操作。 拥有
Product
每次执行一次都会递增。
执行此操作的另一种方法是监视时间,但这不是最可靠的时间。
您还可以计算/近似Big-O,检查Big O, how do you calculate/approximate it?
答案 1 :(得分:0)
好吧,在每个递归调用中,您都访问2D数组中的单个单元格。
由于您标记了访问过的单元格,因此您不能两次访问同一单元格。
因此,总递归调用受2D数组的长度限制。
除递归调用外,您在每次执行find()
方法时都要执行恒定数量的工作。
因此,如果O(N*M)
是2D数组的行数,N
是2D数组的列数,则时间复杂度为M
。
当然,根据您的if(x == 7 && y == 7) return true;
停止条件,看起来二维数组的尺寸为8x8,可以看作一个常数。这样可以使运行时间为O(1)。
O(N*M)
是常规输入数组的复杂度。
答案 2 :(得分:0)
并不难,实际上它使用 DFS 来查找路径。 DFS的顺序为O(V+E)
,其中V
是顶点数,E
是边数。
在这种情况下,您使用邻接矩阵来表示图形。因此在最坏的情况下,时间复杂度为O(M*N)
,其中M
是行数,N
是列数。