当前位置: 首页 > 知识库问答 >
问题:

我的函数的时间复杂度是多少?[副本]

司空学智
2023-03-14
void what(int n) {
    int i;
    for (i = 1; i <= n; i++) {
        int x = n;
        while (x > 0)
            x -= i;
    }
}

好的,第一个for循环显然是o(n)。第一个迭代是O(n),第二个迭代是O(n/2)。我想是不是就像那个log(n)次数?这意味着O(n)*O(log(n))=O(n*log(n))复杂度。我说对了吗?

编辑:(不是复制品)我知道大O是什么。我在一个具体的案例中询问了正确的评估。

共有1个答案

金子轩
2023-03-14

外部循环运行n次。

对于每次迭代,内部循环运行n/i次。

运行的总次数为:

n + n/2 + n/3 + ... + n/n
n * (1 + 1/2 + 1/3 + ... + 1/n)
 类似资料:
  • 问题内容: 我当时在看这个pycon演讲,时间是34:30,发言人说,可以在中完成获取元素列表中最大的元素的操作。 那怎么可能?我的理解是,创建堆将是,但是其本身的复杂性是还是(以及(实际的算法是什么))? 问题答案: 扬声器在这种情况下是错误的。实际费用为。仅在可迭代的第一个元素上调用堆化。就是那个,但如果小于,则微不足道。然后,将所有剩余的元素一次通过添加到此“小堆”中。每次调用需要花费时间。

  • 比方说MD5或SHA-1?这两者的时间复杂度是多少?我试图在网上找到它,但它非常有限,我得到的只是它们都是O(n)。有人能进一步启发我吗?也许给我一个最坏的情况和最好的情况?

  • 我对这个话题很陌生,我正试图掌握与渐近符号相关的一切。我想就以下问题征求你的意见: 如果我们有,对于一个算法,T(n)=n!,那么我们可以说它的时间复杂度: 这个关系意味着n!=O(n^n)和n!=ω(1)。然而,我们不能做得更好吗?我们希望big-oh尽可能接近函数T(n)。如果我们做以下操作: 也就是说,对于倒数第二个元素,我们将 (n-1) 替换为 n。现在这种关系不是真的吗?那么n不是真的

  • Leetcode问题https://leetcode.com/problems/count-binary-substrings/ 该解决方案有效,但我很难提出递归解决方案的时间复杂度。 每当循环遇到s.charAt(i)!=s.charAt(i 1)时,它都会进行递归调用以展开,直到达到基本大小写或其他部分。 因为我遍历整个字符串,所以for循环是O(n)。但是如何确定将进行的递归调用的数量,因为

  • 问题内容: 我在Java类中有一个私有的LinkedList,并且经常需要检索列表中的最后一个元素。列表需要缩放,所以我试图确定在进行更改时是否需要保留对最后一个元素的引用(以实现O(1)),或者LinkedList类是否已经通过getLast()调用完成了此操作。 LinkedList.getLast()的big-O成本 是多少 , 有记载吗? (即,我是否可以依靠此答案,或者即使它是O(1),

  • 问题内容: 我写了以下课程: 然后,在我的方法中,我创建了一个,向其中添加了一些具有“ X”和“ angle”字段的对象。 然后,我使用: 这种排序方法的复杂性是什么? 问题答案: 您可能已经阅读了有关Collections排序的文档,但是这里适合您: 排序算法是一种修改的mergesort(如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。该算法提供了有保证的n log(n)性能。