java时间复杂度方法调用计算

pdkcd3nj  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(345)

就目前的情况来看,这个问题并不适合我们的问答形式。我们希望答案能得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或广泛讨论。如果您觉得这个问题可以改进,并可能重新打开,请访问帮助中心寻求指导。
7年前关门了。
在计算方法调用的时间复杂度时,我是否也必须考虑方法的复杂度,还是将复杂度视为常数时间?谢谢,谢谢

cpjpxq1n

cpjpxq1n1#

你必须考虑这个方法的复杂性。
下面是一个简单的例子来说明这一点:假设你有一个算法,对矩阵的所有元素求和;你可以做:

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]);

然后将项目视为常量时间,因为它只依赖于标量值,而不依赖于矩阵的维数。

相关问题