Big o 两个嵌套循环的大O复杂度

Big o 两个嵌套循环的大O复杂度,big-o,complexity-theory,time-complexity,Big O,Complexity Theory,Time Complexity,我试图找出以下算法的大O复杂性: int i, j; for (i = 0; i < n; i += 5) { for (j = 1; j < n; j *= 3) { // O(1) code here } } inti,j; 对于(i=0;i

我试图找出以下算法的大O复杂性:

int i, j;
for (i = 0; i < n; i += 5)
{
    for (j = 1; j < n; j *= 3)
    {
        // O(1) code here
    }
}
inti,j;
对于(i=0;i
n
是传入方法的数组的大小。由于
i+=5
j*=3
的原因,正在努力解决这个问题。我知道这可能是错误的,但我尝试了以下方法

  • 外循环迭代n/5次。那只是O(n)吗

  • 内部循环迭代log3(n)次。必须仅为log(n)

  • 因为它们是嵌套的,所以将复杂度相乘

  • 那么大的O复杂性就是O(n log(n))


您可以按照以下步骤进行操作:


是的,你是对的。时间复杂度为n(logn)——以3为基数


尝试为n取一个非常大的输入值,您将了解[(n/5)*(log3n)]的图形是相同的。希望这有帮助。

您的工作是正确的。我一点也不明白你的问题。@BenjaminGruenbaum最初我只是想把代码写出来,但我把我的工作放下来,以表明我确实在努力解决这个问题,而不仅仅是从你们那里得到答案。所以复杂性是O(n log(n))?对我来说似乎是正确的,尽管我建议你也听取其他成员的建议和意见。仅供参考,这个问题可能更适合于。你是对的。复杂度为O(n*log(n))。当我们谈论大O符号时,我们谈论的是真正的大输入,这就是函数的定义方式。所以常数并不总是重要的。因此,n/5简单地表示函数与n是线性的,因此外环是O(n)。