如何解决简化大O
// Assume n is some random integer
int q = 1;
while (q <= Math.Sqrt(n))
{
q++;
int k = 1;
while (k <= Math.Log(n,2))
{
k++;
if (q^k == n){
return true;
}
}
return false;
在上面的代码中,我发现很难确定Big O在最坏的情况下将是什么。由于循环运行N次,而嵌套循环运行log2(N)次,我知道它应该是O(sqrt(n)* log2(n))次。但是,我发现如何简化它非常令人困惑。我知道sqrt(n)增长更快,但是我不确定是否可以忽略log2(n),因为它正在被倍增。如果我不忽略log2(n),则不确定它是否应为n ^ 2,因为它是n的两个项相乘,还是应该保留原样。
解决方法
简单点,认为外部的while循环执行了sqrt(n)次,而里面还有另一个while循环执行了log2(n)次,并且在其中假定所有操作花费O(1)时间来完成。被执行。
因此,我们有一个while循环执行了sqrt(n)次,其中有一个操作需要执行O(log2(n))(这是另一个while循环,将其视为黑盒pf,您知道它是渐近的)运行时间)。因此,该算法的复杂度为O(sqrt(n)log2(n))。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。