第5课 算法的时间复杂度

1. 定性判断算法的效率

(1)时间复杂度:算法运行后对时间需求量的定性描述(数据结构课程集中讨论的内容)

(2)空间复杂度:算法运行后对空间需求量的定性描述(判断方法类似于时间复杂度)

2. 大O表示法

(1)算法效率严重依赖于操作(Operation)数量

(2)操作数量的估算可以作为时间复杂度的估算

(3)在判断时首先关注操作数量的最高次项

  O(5) =O(1)

  O(2n+1)=O(2n)=O(n)

  O(n2+n+1) = O(n2)

  O(3n3+1)=O(3n3)=O(n3)

3. 常见时间复杂度

(1)线性阶时间复杂度:O(n)

for(int i=0;i<n; i++){
    //这里是一些复杂度为O(1)的程序语句
}

(2)对数阶时间复杂度:O(logn)

int i = 1;
//循环次数为2^x = n,即x = log2n。
//忽略底数后,时间复杂度为logn
while (i<n){
    i *= 2; //复杂度为O(1)的程序语句
}

(3)平方阶时间复杂度:O(n2)

//循环总次数:n2
for(int i=0; i<n; i++){
    for(int j=0; j<n; j++){
        //复杂度为O(1)的程序语句
    }
}

【计算练习1】

//循环总次数:n + (n-1) + (n-2) +...+ 1 = (n+1)*n/2 ==>O(n2)
for(int i=0; i<n; i++){
    for(int j=i; j<n; j++){ //注意j从i(而不是1)开始。
        //复杂度为O(1)的程序语句
    }
}

【计算练习2】求func函数的时间复杂度

void t(int n)   ==>O(n)
{
    int i=0;
    while(i < n){
        cout << i << endl;
    }
}

void func(int n) //n*(n+1) ==>O(n2)
{
    int i= 0;
    while(i < n){
        t(n);  //O(n)
        i++;   //O(1)
    }
}

【计算练习3】求test函数的时间复杂度

void t(int n)   ==>O(n)
{
    int i=0;
    while(i < n){
        cout << i << endl;
    }
}

//时间复杂度为:O(n) + O(n2) + O(n3) ==>O(n3)
void test(int n)
{
    t(n); //O(n)

    //O(n2)
    for(int i=0; i<n; i++)
        t(i);

    //O(n3)
    for(int i=0; i<n; i++)
        for(int j=i; j<n; j++)
            t(i);  //O(n)
}

4. 小结

(1)时间复杂度是算法运行时对于时间的需求量

(2)大O表示法用于描述算法的时间复杂度

(3)大O表示法只关注操作数量的最高次项

(4)常见的时间复杂度为:线性阶、平方阶和对数阶

时间: 2024-10-21 20:34:25

第5课 算法的时间复杂度的相关文章

第五课 算法的时间复杂度

判断一个算法的效率时,操作数量中的常数项和其他次要项常常可以忽略,只需要关注最高阶项就能得出结论. 如何用符号定性的判断算法的效率呢? 算法的复杂度: 时间复杂度: 算法运行后对时间需求量的定性描述. 空间复杂度: 算法运行后对空间复杂度的定性描述. 数据结构课程重点关注的是算法的效率问题,因此,整个课程会集中的讨论算法的时间复杂度,但其使用方法完全可以用于空间复杂度的判断. 大O表示法: 常见的时间复杂度: 线性时间复杂度: 对数阶时间复杂度: 平方阶时间复杂度: 下面代码片段的时间复杂度是什

目前流行的几种排课算法的介绍

通用高校排课算法研究----2 .目前流行的几种排课算法的介绍 2   目前流行的几种排课算法的介绍 2.1. 自动排课算法 1 .问题的描述 我们讨论的自动排课问题的简化描述如下: 设要安排的课程为{ C1 , C2 , ., Cn} ,课程总数为n , 而各门课程每周安排次数(每次为连续的2 学时) 为{ N1 , N2 , ., Nn} ;每周教学日共5 天,即星期一- 星期五;每个教学日最多安排4次课程教学,即1 - 2 节.3 - 4 节.5 - 6 节和7 - 8 节(以下分别称第1

通用高校排课算法研究----前言

1   绪 论 1.1课题背景与研究意义 1.2课题的应用领域 1.3 课题的现状 1.4解决NP问题的几种算法及其比较 2   目前流行的几种排课算法的介绍 2.1. 自动排课算法 2.2 基于优先级的排课算法 3   基于时间片优先级排课算法描述与分析 3.1排课中的基本原则 3.2排课的基本要求 3.3基于时间片优先级排课算法描述 3.4算法分析 参 考 资 料 1   绪 论 1课题背景与研究意义 排课问题早在70年代就证明是一个NP完全问题,即算法的计算时间是呈指数增长的,这一论断确立

眼下流行的几种排课算法的介绍

通用高校排课算法研究----2 .眼下流行的几种排课算法的介绍 2眼下流行的几种排课算法的介绍 2.1. 自己主动排课算法 1 .问题的描写叙述 我们讨论的自己主动排课问题的简化描写叙述例如以下: 设要安排的课程为{ C1 , C2 , ., Cn} ,课程总数为n , 而各门课程每周安排次数(每次为连续的2 学时) 为{ N1 , N2 , ., Nn} ;每周教学日共5 天,即星期一- 星期五;每一个教学日最多安排4 次课程教学,即1 - 2 节.3 - 4 节.5 - 6 节和7 - 8

算法的时间复杂度和空间复杂度

<算法的时间复杂度和空间复杂度合称为算法的复杂度> --->算法的时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了.并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多.一个算法中的语句执行次数称为语句频度或时间频度.记为T(n). (2)时间复杂度 在刚才提到的时间频度中,n称为问题的规模

数据结构和算法之时间复杂度和空间复杂度

前言 上一篇<数据结构和算法>中我介绍了数据结构的基本概念,也介绍了数据结构一般可以分为逻辑结构和物理结构.逻辑结构分为集合结构.线性结构.树形结构和图形结构.物理结构分为顺序存储结构和链式存储结构.并且也介绍了这些结构的特点.然后,又介绍了算法的概念和算法的5个基本特性,分别是输入.输出.有穷性.确定性和可行性.最后说阐述了一个好的算法需要遵守正确性.可读性.健壮性.时间效率高和存储量低.其实,实现效率和存储量就是时间复杂度和空间复杂度.本篇我们就围绕这两个"复杂度"展开

通用高校排课算法研究----3.基于时间片优先级排课算法

通用高校排课算法研究----3.基于时间片优先级排课算法 3   基于时间片优先级排课算法描述与分析 排课问题实质上是时间.教师.班级.教室.课程这五维关系的冲突问题,要合理的解决这个问题首先要了解排课中的一些基本原则以及排课的一些基本要求. 3.1排课中的基本原则 在课程的编排中应遵循一定的规则, 只有按照基本规则来进行课程的编排才能够减少冲突的发生, 这些基本规则主要有以下几条: 1) 同一班级的学生在同一时间(某些特定的选修课时间除外) 不能安排两门课程 2) 同一教师在同一时间不能安排两

php算法基础----时间复杂度和空间复杂度

算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度). 简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间 时间复杂度 计算时间复杂度的方法: 用常数1代替运行时间中的所有加法常数 修改后的运行次数函数中,只保留最高阶项 去除最高阶项的系数 按数量

[算法技术]算法的时间复杂度与空间复杂度

1.时间复杂度 算法的时间复杂度是衡量一个算法效率的基本方法.在阅读其他算法教程书的时候,对于算法的时间复杂度的讲解不免有些生涩,难以理解.进而无法在实际应用中很好的对算法进行衡量.            <大话数据结构>一书在一开始也针对算法的时间复杂度进行了说明.这里的讲解就非常明确,言简意赅,很容易理解.下面通过<大话数据结构>阅读笔记的方式,通过原因该书的一些简单的例子和说明来解释一下算法的时间复杂度和它的计算方法.          首先从基本定义下手,来了解一下什么是“