美文网首页
浅谈算法复杂度

浅谈算法复杂度

作者: 陈道乐 | 来源:发表于2018-11-04 01:17 被阅读0次

时间复杂度

1. 时间频度

一个算法执行的时间

2.时间复杂度

n 称为事件规模, 当n不断发生变化时, 时间频度T(n)也会不断变化, 这种变化规律称之为时间复杂度

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),存在一个正常数c使得fn*c>=T(n)恒成立。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

空间复杂度

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度

复杂度分析

通常一个算法的复杂度是由其输入量决定的,随着输入的增加,
复杂度随之变化.
为了降低算法复杂度,应当同时考虑到输入量,设计较好的算法

实际计算算法复杂度(以时间为标准)

删除影响不大的常数相

O(1)

int aFunc(void) {
    printf("Hello, World!\n");      //  需要执行 1 次
    return 0;       // 需要执行 1 次
}

//T(n) = 2  则复杂度为O(1)

O(n)

int aFunc(int n) {
    for(int i = 0; i<n; i++) {         // 需要执行 (n + 1) 次
        printf("Hello, World!\n");      // 需要执行 n 次
    }
    return 0;       // 需要执行 1 次
}

//T(n) = n+(n+1), 则O(n)

O(n^2)

void aFunc(int n) {
    // 第一部分时间复杂度为 O(n^2)
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            printf("Hello, World!\n");
        }
    }
    // 第二部分时间复杂度为 O(n)
    for(int j = 0; j < n; j++) {
        printf("Hello, World!\n");
    }
}

//T(n) = n + n*(n + 1) +  n*n + n+(n+1) ,则O(n^2)

含有判断的算法

void aFunc(int n) {
    if (n >= 0) {
        // 第一条路径时间复杂度为 O(n^2)
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                printf("输入数据大于等于零\n");
            }
        }
    } else {
        // 第二条路径时间复杂度为 O(n)
        for(int j = 0; j < n; j++) {
            printf("输入数据小于零\n");
        }
    }
}
//O(n^2) 和 O(n), 选取最大的O(n^2)

O(log(n))

void aFunc(int n) {
    for (int i = 2; i < n; i++) {
        i *= 2;   //执行次数 t^2 = n; 执行次数t =log(2)(n) 
        printf("%i\n", i);
    }
}
T(t) = log(2)(n) = log(2n) 则O(log(n))

O(2^n)

long aFunc(int n) {
    if (n <= 1) {
        return 1;
    } else {
        return aFunc(n - 1) + aFunc(n - 2);
    }
}
//T(n) = T(n - 1) + T(n - 2), 通过归纳证明法可以证明,当 n >= 1 时 T(n) < (5/3)^n,同时当 n > 4 时 T(n) >= (3/2)^n。

相关文章

  • 浅谈算法复杂度

    时间复杂度 1. 时间频度 一个算法执行的时间 2.时间复杂度 n 称为事件规模, 当n不断发生变化时, 时间频度...

  • 算法相关

    算法复杂度相关概念:漫画:什么是时间复杂度?算法的时间复杂度和空间复杂度详解算法题库:力扣 一、排序算法 排序算法...

  • 算法基础知识

    算法的复杂度 算法的复杂度: 算法的时间复杂度和空间复杂度合称为算法的复杂度,一般不特别说明,讨论的时间复杂度均是...

  • 一位算法工程师的自我修养

    数据结构与算法 基本算法思想动态规划贪心算法回溯算法分治算法枚举算法 算法基础 时间复杂度 空间复杂度 最大复杂度...

  • 算法

    重拾算法:算法效率分析(一)(空间复杂度和时间复杂度) 详解算法的各种复杂度的差别有多大(带图) 算法复杂度 选择...

  • 算法复杂度

    算法的复杂度是以什么来度量的? 算法的复杂度是以时间复杂度和空间复杂度来计算的。 ①算法的时间复杂度 ...

  • 浅谈算法和数据结构

    注:采转归档,自己学习查询使用 浅谈算法和数据结构: 一 栈和队列浅谈算法和数据结构: 二 基本排序算法浅谈算法和...

  • 算法复杂度

    算法复杂度 算法复杂度的目的:分析代码执行的时间成本。我们从五个方面来介绍算法复杂度:时间复杂度、时间复杂度分类、...

  • 全网最好的数据结构学习文章合集系列之空间复杂度

    二、空间复杂度 算法概念 及 复杂度 简单的LRU Cache设计与实现 js算法初窥07(算法复杂度) 算法的时...

  • 数据结构-0-时间复杂度和空间复杂度

    1. 算法的复杂度: 算法的复杂度分为时间复杂度和空间复杂度。时间复杂度,是衡量算法执行时间的长度;空间复杂度,是...

网友评论

      本文标题:浅谈算法复杂度

      本文链接:https://www.haomeiwen.com/subject/ebalxqtx.html