如何解决该函数正确的时间复杂度是多少
我是数据结构和算法的初学者。我在一本书中遇到了这个问题( Java中的数据结构和算法变得很简单),其复杂度在本书中表示为O(√n)。据我了解,在输入的情况下,函数的增长幅度大于O(√n),但小于O(n)。
public void function (int n) {
int i=1,s=1;
// s is increasing not at rate 1 but i
while( s <= n) {
i++;
s= s+i;
System.out.println(“*");
}
}
能否请您解释一下此功能的正确时间复杂度是什么?
解决方法
这本书是正确的。每次将one
添加到i
并将i
添加到s
。因此,s
将是1
和1 + 2
,1 + 2 + 3
,...,1 + 2 + 3 + ... + k
。现在,k
是运行循环数,复杂度是Theta(k)
或O(k)
。现在要找到k
的值,我们需要求解1 + 2 + ... + k = n
。作为1 + 2 + ... + k = k(k+1)/2
,我们将有k*(k+1)/2 = n
。因此,k = Theta(sqrt(n))
(只需求解方程式),就意味着该算法位于O(sqrt(n))
中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。