Algorithm 值以2的幂递增的循环的时间复杂度 for(i=1;i

Algorithm 值以2的幂递增的循环的时间复杂度 for(i=1;i,algorithm,math,time-complexity,exponentiation,Algorithm,Math,Time Complexity,Exponentiation,您所拥有的类似于但不是它,因为您得到了错误的结束条件 复杂性在很大程度上取决于域和实现。从示例代码中,我推断出实域和整数 此函数增长非常快,因此在5次迭代后,您需要大整数,即使+,-,*,/,不是O(1)。pow和print的实现也会产生很大的影响 在小的情况下,这是一个名为的函数的实例。没有使用我们最熟悉的函数的解决方案,因此必须定义一个新函数:the。因此,答案是该函数的复杂性为O(slog2 n)。感谢您向我介绍此功能。如果您可以将此作为答案发布,则很高兴接受此功能。因为这正是我所寻找的答

您所拥有的类似于但不是它,因为您得到了错误的结束条件

复杂性在很大程度上取决于域和实现。从示例代码中,我推断出实域整数

此函数增长非常快,因此在5次迭代后,您需要大整数,即使
+,-,*,/,
不是
O(1)
。pow和print的实现也会产生很大的影响


在小
的情况下,这是一个名为的函数的实例。没有使用我们最熟悉的函数的解决方案,因此必须定义一个新函数:the。因此,答案是该函数的复杂性为O(slog2 n)。感谢您向我介绍此功能。如果您可以将此作为答案发布,则很高兴接受此功能。因为这正是我所寻找的答案。请注意
pow(2,I)
除非我可以大于63,否则不应该使用。在你的评论中使用
1@JamesReinstateMonicaPolk漂亮的捕获和有效的信息,但由于结尾条件错误,它不是四分之一,所以不需要
slog
。@phuclv 2^63确实是一个很大的数字,但它是在5次迭代后到达的…:-)我真的不理解你的论点,即结束条件意味着这不是四分体。我没有对实施情况作出任何假设。当指数达到2**65536时,任何传统的bigint实现都会被淹没,这是正确的。但是,也可以使用其他表示法,包括符号表示法或纯四分之一表示法。很难说OP使用的是像psuedo这样的代码,还是实际上有一种真正的语言。除非我误解了当前编写的循环,否则在循环的k次迭代之后,I的值是
2↑↑k
@JamesReinstateMonicaPolk yes
~n=2↑↑k
但是在这种情况下,
k
是未知的,并且
n
的界是已知的,四分体有
k
已知和
n
未知……我肯定你是对的,但我就是看不到。与其不断地打扰你,我只想盯着这个直到我明白为止。谢谢。@JamesReinstateMonicaPolk:)呵呵,我知道这种感觉,通常睡一觉或者喝点茶或者喝点烈性饮料会有帮助。。。如果不是,也不重要,我通常会把这种情况写下来。。。有很多其他有趣的东西在那里没有必要被困在一个单一的。。。
for(i=1;i<=n;i=pow(2,i)) { print i }
for (i=1;i<=n;i=1<<i) print(i); 
i0=i; i<<=(i-i0); 
O( log(i))               // power of 10 datawords (like 1000000000 for 32 bit)
O((log(i))^2)            // power of 2 datawords naive print implementation
O( log(i).log(log(i)))   // power of 2 datawords subdivision or FFT based print implementation
O(log(i))                // power of 2 datawords
O( log(i).log(log(i) + log(i) + log(i) ) -> O(log(i).log(log(i)))
n = tetration(2,k)
k = slog2(n)
n = 2↑↑k
k = 2↓↓n
O(log(n).log(log(n)))