如何计算内部迭代的复杂性

时间:2017-01-05 07:56:08

标签: java iteration time-complexity

这是关于识别java程序的时间复杂度。如果我有像for或while等迭代,我们可以识别复杂性。但是如果我使用java API来完成一些任务,如果它是内部迭代的,我认为我们也应该包含它。如果是这样,那该怎么做。

示例:

          String someString = null;
          for(int i=0;i<someLength;i++){

          someString.contains("something");// Here i think internal iteration will happen, likewise how to identify time complexity          

}

谢谢, 阿迪亚

2 个答案:

答案 0 :(得分:0)

Java API中的内部操作根据其实现有自己的时间复杂性。例如,String变量的contains方法以线性复杂度运行,其中依赖性基于someString变量的长度。

简而言之 - 您应该检查内部操作的工作原理,并在计算复杂性时将其考虑在内。

特别是对于您的代码,时间复杂度类似于O(N * K),其中N是循环的迭代次数(someLength),K是someString变量的长度。

答案 1 :(得分:0)

你是正确的,因为内部迭代会增加你的复杂性。但是,除了相当少的情况外,API方法的复杂性没有很好地记录。许多收集操作都具有所有实现的上限要求,但即使在这种情况下,也不能保证实际代码的复杂性不低于所需的复杂度。对于像String.contains()这样的案例,一个有根据的猜测几乎肯定是正确的,但同样不能保证。

对于一致的指标,最好的选择是查看您正在使用的特定API实现的源代码,并尝试从中找出复杂性。另一个好方法是使用各种输入大小和类型对您关注的方法运行基准测试,并简单地从结果图的形状估计复杂性。对于代码太复杂而无法直接分析的情况,后一种方法可能会产生更好的结果。