java - 算法的复杂性(嵌套循环)

标签 java c algorithm time-complexity discrete-mathematics

我得到了这样一个算法的代码:

1  sum =0;
2    for(i=0; i<n; i++)
3      for(j=1; j<= n; j*=3)
4        sum++;

有人告诉我这个算法在 O(nlogn) 中运行,其中 log 以 3 为底。 所以我得到第二行运行 n 次,并且由于第 3 行独立于第 2 行我必须将两者相乘才能得到大 O,但是,我不确定答案如何是 nlogn(以 3 为基数登录),他们是否保证每次都能解决这个问题?似乎对于嵌套循环,每次都会发生不同的情况。

最佳答案

你被告知的是正确的。该算法运行于 O(nlog(n)) .第三行:for(j=1; j<= n; j*=3)O(log3(n)) 中运行因为你每次乘以 3。为了更清楚地看到它解决问题:你需要将 1 乘以 3 多少次才能得到 n。或者 3^x = n .解决方案is x = log3(n)

关于java - 算法的复杂性(嵌套循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34113485/

相关文章:

algorithm - 图中的 K 个互斥路径

algorithm - 邀请人们参加聚会的最佳算法

java - 尝试从 Spring 中的 WEB-INF 目录读取属性文件时出错

被 rpcgen 示例代码搞糊涂了

c - 传递结构时不兼容的类型

c++ - 全局 const 变量的 G++ 名称修饰

java - JunitParamsRunner 测试

java - Gradle:从下载的 POM 中获取 Maven 存储库列表

java - 如何将 EBNF 重复实现为 Java 代码?

string - 在 O(mn) 中解决字符串对齐问题