该算法的时间复杂度以及如何主要针对第4行确定它的步骤

时间:2018-04-30 10:41:21

标签: time time-complexity complexity-theory

void programB(int n) {
    long prod = 1;
    for (int c=1;c<n;c=c*3)
        prod = prod * c;

我不知道如何计算第3行代码的时间复杂度。是n ^ 3吗?

3 个答案:

答案 0 :(得分:2)

如果你没有参加考试并且有足够的时间,我总是建议尝试一些数字:

n=10:
c = 1, 3, 9

n=20:
c = 1,3,9

n=30:
c=1,3,9,27

正如您所看到的,迭代次数不仅低于n^3,还远小于n。基本上你检查在这个循环中你可以在n内乘以3的次数,这是我的提示。

答案 1 :(得分:0)

如果你有

void programB(int n) {
    long prod = 1;
    for (int c=1;c<=n;c=c+1)
        prod = prod * c;

这将贯穿n事物,因此是O(n)。

void programB(int n) {
    long prod = 1;
    for (int c=1;c<=n;c=c+1)
        for (int c=1;c<=n;c=c+1)
            prod = prod * c;

这会为每个n事物运行n项,给你O(n ^ 2)

要获得n ^ 3,您需要另一个for循环:

void programB(int n) {
    long prod = 1;
    for (int c=1;c<=n;c=c+1)
        for (int c=1;c<=n;c=c+1)
            for (int c=1;c<=n;c=c+1)
                prod = prod * c;

你的案例没有完成所有n事,因为它以c=c*3的步长跳跃,给出了3的幂,如kabanus&#39;所示。回答:1,3,9,27 ...... 这给你log_3 n或O(log(n)) - 因为基数并不重要。

答案 2 :(得分:0)

此for循环的时间复杂度为 log n base a

int n,a;
    for(int c=1;c<n;c=c*a) 
    {
          //Some code
    }