时间复杂度方法 - 呼叫计算

时间:2013-06-05 22:02:25

标签: java time-complexity

在计算方法调用的时间复杂度时,我是否也必须考虑方法的复杂性,或者只是将复杂性视为恒定时间? 谢谢,谢谢

1 个答案:

答案 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);
与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]);

然后你将项目视为恒定时间,因为它只取决于标量值而不是矩阵的维数。