【发布时间】:2018-03-08 08:30:01
【问题描述】:
你好 StackOverflow 社区!
这么多天我一直在想这个问题,最后决定解决它。那么,给定一个算法,或者说一个函数在你的日常编码活动中实现了一些非标准算法,你如何分析朗姆酒时间复杂度?
好的,让我更具体一点。假设你正在解决这个问题,
给定一个由正整数组成的 NxN 矩阵,找出其中最长的递增序列。您只能向上、向下、向左或向右移动,但不能沿对角线移动。
例如:如果矩阵是
[ [9,9,4],
[6,6,8],
[2,1,1] ].
算法必须返回 4
(序列为1->2->6->9)
是的,看来我必须使用 DFS。我明白这部分。我已经在 Uni 完成了我的算法课程,并且可以解决这些问题。所以,我想出了这个解决方案说,
class Solution
{
public int longestIncreasingPathStarting(int[][] matrix, int i, int j)
{
int localMax = 1;
int[][] offsets = {{0,1}, {0,-1}, {1,0}, {-1,0}};
for (int[] offset: offsets)
{
int x = i + offset[0];
int y = j + offset[1];
if (x < 0 || x >= matrix.length || y < 0 || y >= matrix[i].length || matrix[x][y] <= matrix[i][j])
continue;
localMax = Math.max(localMax, 1+longestIncreasingPathStarting(matrix, x, y));
}
return localMax;
}
public int longestIncreasingPath(int[][] matrix)
{
if (matrix.length == 0)
return 0;
int maxLen = 0;
for (int i = 0; i < matrix.length; ++i)
{
for (int j = 0; j < matrix[i].length; ++j)
{
maxLen = Math.max(maxLen, longestIncreasingPathStarting(matrix, i, j));
}
}
return maxLen;
}
}
效率低下,我知道,但我是故意这样写的!无论如何,我的问题是,您如何分析 longestIncreasingPath(matrix) 函数的运行时间?
我可以理解他们在 Algos 课程中教给我们的分析,你知道标准的 MergeSort、QuickSort 分析等。但不幸的是,我不想这么说,那没有让我准备好应用它在我的日常编码工作中。我现在就想做,因此想从分析这些功能开始。
有人可以在这里帮助我并描述分析上述函数的运行时需要采取的步骤吗?这对我有很大帮助。提前致谢,干杯!
【问题讨论】:
标签: algorithm performance time-complexity big-o code-complexity