标签: asymptotic-complexity

Big O表达式的表示法

如果我有一个需要4n ^ 2 + 7n动作才能完成的算法,它的O是什么?O(4N ^ 2)?为O(n ^ 2)?

我知道7n被切断,但我不知道是否应该保留n ^ 2系数.

谢谢

big-o time-complexity asymptotic-complexity

6
推荐指数
4
解决办法
2599
查看次数

棘手的Big-O复杂性

public void foo(int n, int m) {
    int i = m;

    while (i > 100) {
        i = i / 3;
    }
    for (int k = i ; k >= 0; k--) {
        for (int j = 1; j < n; j *= 2) {
            System.out.print(k + "\t" + j);
        }
        System.out.println();
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为复杂性将是O(logn).
这是内循环的产物,外循环 - 永远不会执行超过100次,因此可以省略.

我不确定的是while子句,它是否应该被整合到Big-O复杂性中?对于非常大的i值,它可能产生影响,或算术运算,无关紧要,算作基本操作,可以省略?

big-o asymptotic-complexity

6
推荐指数
2
解决办法
919
查看次数

预计运行时间与最坏情况运行时间

我正在研究随机快速排序算法.我意识到这个算法的运行时间总是表示为"预期运行时间".

指定或使用"预期运行时间"的原因是什么?我们为什么不计算最差或平均情况?

random algorithm quicksort asymptotic-complexity

6
推荐指数
2
解决办法
8081
查看次数

将n个元素插入已包含n个元素的二进制堆的渐近时间复杂度

假设我们有一个包含n个元素的二进制堆,并希望插入n个更多的元素(不一定是一个接一个).这需要的总时间是多少?

我认为这是theta(n logn),因为一次插入需要登录.

algorithm binary-heap asymptotic-complexity data-structures

6
推荐指数
2
解决办法
6025
查看次数

双循环的复杂性

我试图找出使用Big O表示法的for循环的复杂性.我之前在其他课程中已经完成了这个,但是这个比其他课程更严格,因为它是在实际的算法上.代码如下:

for(cnt = 0, i=1; i<=n; i++) //for any size n
{
    for(j = 1; j <= i; j++)
    {
       cnt++;
    }
}
Run Code Online (Sandbox Code Playgroud)

for(cnt = 0, i=1; i<=n; i*=2) //for any size n
{
    for(j = 1; j <= i; j++)
    {
       cnt++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经到了,第一个循环具有O(n)复杂性,因为它经过n次列表.至于第二个循环,我有点迷失.我相信,对于每个被测试的n,它都会经历一次循环.我(错误地)假设这意味着每次评估循环都是O(n*i).在我的假设中是否有任何我遗漏的东西.我知道cnt ++是恒定的时间.

感谢您在分析中提供的帮助.每个循环都在自己的空间中,它们不在一起.

algorithm discrete-mathematics asymptotic-complexity

6
推荐指数
1
解决办法
3457
查看次数

三个嵌套for循环的渐近分析

我想计算这个嵌套for循环的θ复杂度:

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            for (int k = 0; k < j; k++) {
                // statement
Run Code Online (Sandbox Code Playgroud)

我会说它是n ^ 3,但我不认为这是正确的,因为每个for循环不会从1变为n.我做了一些测试:

n = 5 - > 10

10 - > 120

30 - > 4060

50 - > 19600

所以它必须在n ^ 2和n ^ 3之间.我尝试了总和公式等,但我的结果太高了.虽然n ^ 2 log(n),但那也错了......

complexity-theory big-theta asymptotic-complexity

6
推荐指数
1
解决办法
1177
查看次数

printf的渐近复杂性

假设我正在打印一个字符串,如下所示:

printf("%s", s);
Run Code Online (Sandbox Code Playgroud)

我们可以假设这个函数的渐近复杂性是什么?

它是O(n),其中n是strlen(s) - 它的长度是多少?或者它是某种方式O(1),恒定的时间.或者不同的东西?不过,我认为你需要知道printf是如何实现的.任何见解都表示赞赏!

(我应该澄清一点,我说的是C而不是C++,但我怀疑它们的实现方式不同)

编辑:将格式字符串添加到printf()

c c++ big-o printf asymptotic-complexity

6
推荐指数
1
解决办法
466
查看次数

递归的复杂性:T(n)= T(n-1)+ T(n-2)+ C.

我想了解如何达到下面递归关系的复杂性.

T(n) = T(n-1) + T(n-2) + C 鉴于T(1) = CT(2) = 2C;

通常对于像T(n) = 2T(n/2) + C(给定T(1)= C)的方程式,我使用以下方法.

T(n) = 2T(n/2) + C
=> T(n) = 4T(n/4) + 3C
=> T(n) = 8T(n/8) + 7C
=> ...
=> T(n) = 2^k T (n/2^k) + (2^k - 1) c
Run Code Online (Sandbox Code Playgroud)

现在什么时候n/2^k = 1 => K = log (n)(到基地2)

T(n) = n T(1) + (n-1)C
     = (2n -1) C
     = O(n)
Run Code Online (Sandbox Code Playgroud)

但是,我无法针对我所遇到的问题提出类似的方法.如果我的方法不正确,请纠正我.

algorithm complexity-theory recurrence time-complexity asymptotic-complexity

6
推荐指数
2
解决办法
1万
查看次数

在同一个Big-Θ复杂度类中是2 ^ n还是4 ^ n?

是2 ^ n =Θ(4 ^ n)?

我很确定2 ^ n不在Ω(4 ^ n)中,因此不在Θ(4 ^ n)中,但我的大学导师说它是.这让我很困惑,我找不到每个Google的明确答案.

complexity-theory big-o big-theta asymptotic-complexity

6
推荐指数
1
解决办法
9612
查看次数

访问元素 - 真的是O(1)?

的是一个O(1)操作的例子是,在一个数组访问的元素.根据一个来源,O(1)可以通过以下方式定义:

[Big-O of 1]表示算法的执行时间不依赖于输入的大小.它的执行时间是不变的.

但是,如果想要访问数组中的元素,操作的效率是否取决于数组中的元素数量?例如

int[] arr = new int[1000000];
addElements(arr, 1000000); //A function which adds 1 million arbitrary integers to the array. 

int foo = arr[55]; 
Run Code Online (Sandbox Code Playgroud)

我不明白最后一个语句如何描述为在O(1)中运行; 数组中的1,000,000个元素是否与运行的运行时间有关?当然,找到元素55需要的时间比元素1要长?如果有的话,这对我来说就像O(n).

我确定我的推理存在缺陷,但是,我只想澄清一下如何在O(1)中运行

arrays algorithm big-o computer-science asymptotic-complexity

5
推荐指数
2
解决办法
3731
查看次数