在计算方法调用的时间复杂度时,我是否也必须考虑方法的复杂性,或者只是将复杂性视为恒定时间? 谢谢,谢谢
答案 0 :(得分: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);
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]);
然后你将项目视为恒定时间,因为它只取决于标量值而不是矩阵的维数。