2.数据结构--算法和算法分析

算法和算法分析

算法: 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一个条指令表示一个或多个操作。

算法5个重要特性:

  • 有穷性: 一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成.
  • 确定性:算法中每一条指令必须有确切的含义,并且任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的输出.
  • 可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算操作执行有限次来实现的
  • 输入:一个算法有零个或多个的输入,这些输入取自某个特定的集合
  • 输出:一个算法有一个或多个的输出,这些输出是同输入有着某些特定关系的量
算法设计要求
  • 正确性:
    • a.程序不含语法错误;
    • b.程序对于机组输入数据能够得出满足规格说明要求的结果;
    • c.程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;
    • d.程序对于一切合法的输入数据都能产生满足规格说明的结果. (d的要求极困难,通常以c的正确性作为衡量一个程序是否合格的标准)
  • 可读性:人读,有助于理解算法,晦涩难懂易隐藏错误,难以调试和修改
  • 健壮性:当输入非法数据时,算法也能适当做出反应或进行处理,而不会产生莫名其妙的输出结果.
  • 效率与低存储量:效率指算法的执行时间,对于同一个问题如果有多个算法可以解决,执行时间短的算法效率高.存储量需求指算法执行过程中所需要的最大存储空间.效率与低存储量需求这两者都与问题的规模有关.
算法效率的度量

算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量.而度量一个程序的执行时间通常有两种办法

  • (1)事后统计的方法:利用计算机计时功能,不同算法的程序可通过一组或若干组相同的统计数据以分辨优劣:缺陷:1,必须先运行依据算法编制的程序;二,所得时间的统计量依赖于计算机的硬件、软件等因素,有时容易掩盖算法本身的优劣
  • (2)事前分析的方法:高级语言编写的程序在计算机上运行时所消耗的时间取决于如下因素
    • ①依据的算法选用何种策略;
    • ②问题的规模
    • ③书写程序的语言,对于同一个算法,实现语言的级别越高,执行效率越低;
    • ④编译程序所产生的机器代码质量;
    • ⑤机器执行指令速度
      一个算法是由控制结构(顺序分支和循环3种)和原操作(指固有数据类型的操作)构成的,则算法时间取决于两者的综合效果. 比较同一问题的不同算法,通常做法是, 从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量度
例如在两个N x N矩阵相乘的算法中,"乘法"运算是"矩阵相乘问题"的基本操作.整个算法的执行时间与该基本操作(乘法)重复执行的次数n^3正比,
记作T(n)=O(n^3)

for (i = 1; i <= n; ++i) {
    for (j = 1; j <= n; ++j) {
        c[i][j] = 0;
        for (k = 1; k <= n; ++k) {
            c[i][j] += a[i][k] * b[k][j];
        }
    }
}

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作 T(n)=O(f(n)), 它表示随问题规模n的增大,算法执行时间的增长率和f(n)增长率相同,称作算法的渐进时间复杂度(asymptotic time complexity),简称时间复杂度.
显然,被称作问题的基本操作的原操作应是其重复执行次数和算法的执行时间成正比的原操作,
多少情况下它是最深层循环内的语句的原操作, 它的执行次数和包含它的语句频度相同,语句的频度指的是该语句重复执行的次数,

算法的存储空间需求

空间复杂度: 算法所需存储空间的亮量度,记作S(n) = O(f(n)),其中n为问题的规模(或大小),一个程序除了需要存储空间来寄存本身所用指令、常数、变量、输入数据外,也需要对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间.若输入数据所占空间只取决于问题本身,和算法无关,则需要分析除输入和程序之外的额外空间,否则应同时考虑输入本身的所需的空间(和输入数据的表示形式有关).若额外空间相对于输入数量来说是常数,则称此算法为原地工作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值