数据结构第四课笔记------------狄泰软件学院

程序的效率

问题:
如果两个算法都符合功能性需求,那工程中最关心的其他特性是什么?如何比较评判?
性价比(效率)是工程中最关注的的算法附加特性!
算法效率的度量
1.事后统计法:比较不同算法对同一组输入数据的处理时间。
缺陷:(1)为了获得不同算法必须编写相应程序
(2)运行时间严重依赖硬件以及运行时的环境因素
(3)算法的测试数据选取困难
2.事前分析估算:依据统计的方法对数据进行估算
影响算法效率的主要因素:
(1)算法采用的策略和方法
(2)问题的输入规模
(3)编译器所产生的代码
(4)计算机执行速度

int func(int a[], int len)       // ==> (n*n + 2)
{
    int ret = 0;                            // 1

    for(int i=0; i<len; i++)
    {
        for(int j=0; j<len; j++)
        {
            ret += a[i] * a[j];         // n * n
        }
    }

    return ret;                       // 1
}

程序效率的关键部分为n^2,随着n的不断增大,操作的数量很大程度的增大,不同的程序在这时候效率的差距就体现出来了。
总结:
事前分析估算法通过操作数量来判断程序效率。
判断一个算法效率是只需关注最高阶就能得出结论
如:2n+1 与 n^2+1 只需比较 n与n^2。

原文地址:http://blog.51cto.com/13563176/2060259

时间: 2024-11-15 14:25:07

数据结构第四课笔记------------狄泰软件学院的相关文章

数据结构第三课笔记----------------狄泰软件学院

程序的灵魂 引出问题程序是否越短越好?程序是不是别人读不懂就证明自己很厉害?数据结构静态的描述了数据元素之间的关系.高效的的程序需要在数据结构的基础上选择合适的算法.算法是特定问题求解的步骤,在计算机中表现为指令的有限序列.算法是独立存在的的一种解决问题的方法和思想,对于算法而言,思想最重要.算法的特性:输入:算法具有0个或多个输入.输出:算法至少有一个或多个输出.有穷性:算法在有限的步骤之后会自动结束而不会无限循环.或者可以说是在可接受的范围内能自动结束.确定性:算法的每一步都会都有确定的的含

数据结构第二课笔记--------------狄泰软件学院

数据的艺术 程序设计的挑战(1)利用计算机解决生活的问题(2)生活中的不同个体存在联系,且关系复杂(3)如何用计算机程序描绘生活中的个体以及个体之间的联系 计算机能接受处理的是数据,我们可以将数据写入到程序里,然后计算,因此,我们要考虑在程序里面如何用数据来描述客观的事物,来描述生活里面的个体,描述个体之间的关系. 数据的概念数据在计算机里就是程序的操作对象,可以描述客观事物.数据的特点(1)可以输入到计算机(2)可以被计算机程序处理 微观角度数据的新概念(1)数据元素:组成数据的基本单位(2)

数据结构第六课------------狄泰软件学院

图片出自狄泰软件学院工程里面一般采用时间复杂度在 O(n^3) 之前的算法.算法的最好与最坏情况:一般推断算法的最坏情况,当程序在最坏情况都能满足要求是,说明在最好和平均情况都能满足要求. 算法的空间复杂度 (Space Complexity)定义:S(n) = S(f(n))n为算法的问题规模f(n)为空间使用函数,与n有关推导时间复杂度的方法同样适用于空间复杂度如当算法所需要的空间复杂度是常数时,空间复杂度为S(1)S(n+4) = S(n)空间与时间的比较(1)多数情况下,算法的时间复杂度

第十四课、线性表的本质和操作-----------------狄泰软件学院

一.线性表(List)的表现形式 1.零个或者多个数据元素组成的集合 2.数据元素在位置上是有序排列的 3.数据元素的个数是有限的 4.数据元素的类型必须相同 二.线性表(List)的抽象定义 1.线性表是具有相同类型的n(>=0)个数据元素的有限序列 {a0,a1,a2,....an-1} ai是表项(数据元素),n是表长度 三.线性表(List)的性质 1.a0为线性表的第一个元素,只有一个后继 2.an-1为线性表的最后一个元素,只有一个前驱 3.除a0和an-1外的其它元素ai,既有前驱

第十三课、类族的结构进化-------------------狄泰软件学院

一.遵循经典设计原则 DTLib中的所有类位于单一继承树 IvalidOperationEXception是新增的异常类,描述某些成员函数在状态不对的时候被抛出 二.改进的关键点 1.EXception类继承自Object类:堆空间中创建异常对象失败时,返回NULL指针,用的是自己的new版本 更改: 2.新增IvalidOperationEXception异常类:成员函数调用时,如果状态不正确则抛出该异常 增加: //非法操作异常 class IvalidOperationEXception:

第十一课、异常类的构建-------------狄泰软件学院

一.自定义异常类 1.异常的类型可以是自定义的类类型 2.对于类类型的匹配依旧是之上而下的严格匹配 3.赋值兼容性原则在异常匹配中依然适用 所以要 (1).匹配子类异常的catch放在上部 (2).匹配父类异常的catch放在下部 4.异常类是数据结构所依赖的"基础设施"(现代c++库也必然包含充要的异常类族) 二.一步步打造自己的异常类 1.首先是抽象类EXception的编写,既然是抽象类,必然含有纯虚函数,通常的做法都是将析构函数作为纯虚函数 头文件:接口定义 class Exc

第三课、初识程序的灵魂------------------------狄泰软件学院

一.初识程序的灵魂 1.数据结构静态描述了数据元素之间的关系 2.高效的程序需要在数据结构的基础上设计和选择算法 高效的程序需要: (1).恰当的数据结构 (2).合适的算法 3.算法是特定问题求解步骤的描述,在计算机中表现为指令的有限序列 (1).算法是独立存在的一种解决问题的方法和思想 (2).对于算法而言:语言不重要,重要的是思想 4.算法的特性 (1).输入:算法具有0个或者多个输入 (2).输出:算法至少有一个或者多个输出 (3).有穷性:算法在有限的步骤之后会自动结束而不会自动循环

第九课、智能指针示例------狄泰软件学院

一.内存泄漏(臭名昭著的bug) (1).动态申请堆空间,用完后不归还 (2).c++语言中没有垃圾回收机制 (3).指针无法控制所指向的堆空间生命周期(如局部指针生命周期结束了堆空间的生命周期还未结束) 二.智能指针 1.当代c++平台的智能指针 (1).指针生命周期结束时主动释放堆空间 (2).一片堆空间最多只能由一个智能指针标识 (3).杜绝指针运算和指针比较 2.智能指针的设计方案 (1).通过类模板描述指针的行为:能够定义不同类型的指针变量 (2).重载指针特征操作符(->和*):利用

第十六课、顺序存储结构的抽象实现----------狄泰软件学院

一.课程目标 1.完成顺序存储结构的抽象实现,既然是抽象实现,自然就是抽象类,不能生成对象 (1).抽象类模板,存储空间的位置和大小由子类完成  (2).这里只实现顺序存储结构的关键操作(增.删.查等) (3).提供数组操作符,方便快速获取元素(要提供const版本的,方便const对象调用) 二.具体实现 这里需注意几点 (1).这里将capacity()函数设置为纯虚函数,说明在这里还不需要实现它,将其留到子类中在实现. (2).数组操作符的返回值一个是引用一个是值,是因为const对象不能