Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用确定的比较器,以指数方式增加的循环的运行时间是多少?_Java_Loops_Time Complexity_Big O - Fatal编程技术网

Java 使用确定的比较器,以指数方式增加的循环的运行时间是多少?

Java 使用确定的比较器,以指数方式增加的循环的运行时间是多少?,java,loops,time-complexity,big-o,Java,Loops,Time Complexity,Big O,此循环的大O运行时间是多少: for(int n=100; n <= 60000; n = n * 3){ ....inner loop code.... } for(int n=100;n它不是O(log n)。正如您所说,此循环的运行时间是恒定的,不依赖于某个变量n。如果循环运行的次数取决于外部提供的某个参数(例如数组的长度或此算法处理的某个参数),您可以在此处使用Big-O表示法假设循环中的代码是O(1),那么复杂度是O(log3n) 由于每次迭代都要乘以3,因此迭代的次数大致为x

此循环的大O运行时间是多少:

for(int n=100; n <= 60000; n = n * 3){
....inner loop code....
}
for(int n=100;n它不是O(log n)。正如您所说,此循环的运行时间是恒定的,不依赖于某个变量n。如果循环运行的次数取决于外部提供的某个参数(例如数组的长度或此算法处理的某个参数),您可以在此处使用Big-O表示法

假设循环中的代码是O(1),那么复杂度是O(log3n)

由于每次迭代都要乘以3,因此迭代的次数大致为
x
,其中
100*3^x=60000

要按照
x
重新排列公式,您将得到
3^x=600
,因此
x=log3(600)

现在我假设
60000
是这里的输入
n
,你想知道当你增加这个数字时所需的时间是如何变化的,你得到了一个log3关系


正确答案是O(1),因为循环运行一定次数,在这种情况下,它总是线性时间。

是O(1),因为没有变量输入。@ElliottFrisch
n
的值是按指数递增的。外循环是O(对数n)。不是O(1)“它每次运行的时间都是恒定的……”markspace在他的帖子正文中说,“但我不确定,因为它运行的次数是确定的。”这让我相信他是认真的。我不认为这个问题应该被标记下来。这是一个非常好的练习,可以仔细阅读和仔细思考。即使是一些有经验的程序员也被这个问题绊倒了,所以我认为这是值得问和回答的。我也有同样的想法,但我认为聪明的安迪·特纳·斯库恩markspace如果这是一个诡计问题,那么是的,我想他是对的。即使这不是一个诡计问题,你通常也不会在O中写log_3,因为log_3(n)与log(n)/log(3)相同,而1/log(3)是一个常量。@ChaiT.Rex这是非常正确的。