在计算方法调用的时间复杂度时,我是否也必须考虑方法的复杂度或只将复杂度视为常数时间?谢谢,谢谢
问问题
806 次
1 回答
1
您必须考虑方法的复杂性。
这里有一个简单的例子来说明这一点:假设你有一个算法,可以对矩阵的所有元素求和;你可以做 :
sum = 0
for (i = 0; i < m.M; ++i)
for (j = 0; j < m.N; ++j)
sum += m[i, j];
或者 :
sum = 0
for (i = 0; i < m.M; ++i)
sum += sumRow(m, i);
使用 sumRow:
for (j = 0; j < m.N; ++j)
sum += m[i, j];
return sum
如您所见,您不能将 sumRow 函数视为具有恒定复杂性,因为它的执行时间取决于问题的维度。
但是,如果该方法不依赖于您认为它在恒定时间内执行的任何维度。
例如,您可以在求和之前预测值:
sum = 0
for (i = 0; i < m.M; ++i)
for (j = 0; j < m.N; ++j)
sum += project(m[i, j]);
然后您将项目视为常数时间,因为它仅取决于标量值而不是矩阵的维度。
于 2013-06-05T22:13:42.380 回答