赞
踩
目录
一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列
自然语言 流程图 程序设计语言 伪码
1.输入 有0个或多个输入
2.输出 有一个或多个输出(处理结果)
3.确定性 每步定义都是确切、无歧义的
4.有穷性 算法应在执行有穷步后结束
5.有效性 每一条运算应足够基本
1.正确性
2.可读性
3.健壮性
4.高效性(时间代价和空间代价)
1.算法效率:用依据该算法编制的程序在计算机上执行所消耗的时间来度量
2.衡量算法效率的方法:事后统计 事前分析估计
利用计算机内的计时功能,不同算法的程序可以用一组或多组相同的统计数据区分
缺点:
>>必须先运行依据算法编制的程序
>>所得时间统计量依赖于硬件、软件等环境因素,掩盖算法本身的优劣
一个高级语言程序在计算机上运行所消耗的时间取决于:
>> 依据的算法选用何种策略
>> 问题的规模
>> 程序语言
>> 编译程序产生机器代码质量
>> 机器执行指令速度
同一个算法用不同的语言、不同的编译程序、在不同的计算机上运行,效率均不同,———使用绝对时间单位衡量算法效率不合适
1.算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作: T(n)=O(f(n))
>>算法中重复执行次数和算法的执行时间成正比的语句 对算法运行时间的贡献最大
>>n越大算法的执行时间越长
排序:n为记录数
矩阵:n为矩阵的阶数
多项式:n为多项式的项数
集合:n为元素个数
树:n为树的结点个数
图:n为图的顶点数或边数
2.数学符号“O”的定义为:
若T(n)和f(n)是定义在正整数集合上的两个函数,则T(n) = O(f(n))表示存在正的常数C和n0,使得当n≥n0时都满足0≤T(n)≤Cf(n)。
表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相同,称渐近时间复杂度。
重复执行的次数:n*n; T( n ) = O ( n ^2) 即:矩阵加法的运算量和问题的规模n的平方是同一个量级
- n * n阶矩阵加法:
- for( i = 0; i < n; i++)
- for( j = 0; j < n; j++)
- c[i][j] = a[i][j] + b[i][j];
分析算法时间复杂度的基本方法:
>>找出语句频度最大的那条语句作为基本语句
>>计算基本语句的频度得到问题规模n的某个函数f(n)
>>取其数量级用符号“O”表示
时间复杂度是由嵌套最深层语句的频度决定的
当n取得很大时,指数时间算法和多项式时间算法在所需时间上非常悬殊
1.空间复杂度:算法所需存储空间的度量,记作: S(n)=O(f(n))
>>其中n为问题的规模(或大小)
2.算法要占据的空间
>>算法本身要占据的空间,输入/输出,指令,常数,变量等
>>算法要使用的辅助空间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。