赞
踩
一组有穷的规则,规定了解决某一特定类型问题的一系列运算。
算法必须满足的五个特性;满足前四个的叫做计算过程:操作系统
无二义性,或者没有意义
例子:5/0,将6或者7与x相加
每种运算在原理上可以由人用纸笔在有限时间内完成。
例子:无限长的实数相加
在算法开始之前给出的量
和输入有特定关系
在执行有限步终止
把算法学习分为五个方面。
学习基本设计策略
在程序正确性证明领域没有突破性进展的前提下:
SPARKS语言
程序证明:用程序的正确来代替算法正确(权宜之计)
算法分析,计算时间和存储空间定量分析
调试
作时空分布图,用给定的 数据执行调试后认为正确的程序测定计算出结果花去的时间空间
基本运算:加减乘除,浮点数预算,比较,变量赋值,过程调用等是常数
另一类运算:更基本的任意长序列运算组成:两个字符串比较运算
移动位置,比较单个字符是常数,取决于长度。
反映算法在各种情况下工作的数据集,编写出能产生最好最坏和有代表性情况的数据配置。
事前分析:时间限界函数
事后测试:实际执行时间和实际占用空间的统计
频率计数和每次的执行时间,*就是时间总量
事前分析只限于确认每条语句的频率计数
在实际算法分析中,想用多项式来表示时间,但是现实很复杂,确认系数困难,而确认次数容易,而这个系数却能基本反映关系
fn和机器与语言有关,但是n,n^2和他们无关。
O(gn)在这里给了定义说是小于等于gn的c次方;为计算时间的上界函数
定理2.1很显然
多项式时间算法
指数时间算法
2^n<n!<n ^n
有人能把指数级算法简化为多项式算法就可以发论文了
Ω
是下界函数
\Omega 是下界函数
Ω是下界函数
Θ
\Theta
Θ是最好情况和最坏情况下的计算时间就一个常因子!范围内时相同的
i的累加为n(n+1)/2
i方的累加为n(n+1)(2n+1)/6
i的k次方的累加为
∑ i k = n k ∗ n n + 1 + n k 2 + 低次项 \sum\;i^k=\frac{n^k*n}{n+1}+\frac{n^k}{2}+低次项 ∑ik=n+1nk∗n+2nk+低次项
时钟精确程度低噪声淹没时间分布
多道程序和分时系统对它造成困扰
对于事前分析为第三个函数的时间的算法,不断加大数据集合事前分析吻合则印证
对于为第一个函数的时间的算法,在各个规模范围内分别按照最好最坏和平均时间情况分别做出曲线,并且由这些曲线分析最优的有效逻辑位置
为了解决某一个问题,有一些算法,在相同情况下做出改进,则在该情况下做出他们的时间分布图判别速度哪个快。
sparks语言与ALGOL语言和PASCAL语言形式接近
sparks语言的描述
sparks使用任意上下界的多维数组
布尔表达式和C语言一样短路方式求值
for循环表达式中by increment没有的时候默认+1
for循环边while循环
vble<-start
fin<-finish
incr<-increment
while(vble-fin)*incr<=0 do
S
vble<-vble+incr
repeat
goto在将递归程序变成迭代形式时,go to语句是有用的,go to受限形式exit
程序调用实参和形参:
常数和表达式把他们的地址送到被调用过程
实参的地址送到被调用过程替换与其对应的实参
局部变量
全程变量
形参
将值带入过程,其值在过程不变int
过程入口处定义,在过程结束赋予新值out
将一个值带入并且将一个可能变化的值带出,inout
凡是改变参变量或者全程变量的叫做具有边界效应
纯过程没有函数值返回,它的返回值靠参变量和全程变量实现
因此至少一个out或者inout完全依赖边界效应
函数过程也可以具有边界效应,但是sparks写算法这本书约定只有函数过程要嘛就是纯过程
函数过程使用的情况:
比如该算法返回值在调用它的过程的表达式中使用且就使用一次则最好将其写成函数过程:比如我数据结构ppt4里面的栈的实现中isfull,isempty就都是函数过程的实现,而push,pop都是纯过程实现
过程对其它过程的调用是在执行了某种任务后返回到原调用过程的下一条语句:在sparks语言中都允许使用
直接递归:
一个过程包含对自己的调用
间接递归:
a调用b,b调用a
read print和注释没啥好说的
混合运算规则I/O格式什么的还有字符集对算法帮助不打忽略
带有自然语言和常见数学表示的SPARKS成为拟SPQRKS
xmax看成全程变量是指在外部定义了该变量
同质异相和C++temple<typename>很像
主要是数据结构知识的复习
线性表,
栈:所有插入删除都在top一段进行lifo
队列:插入在rear一段进行,删除在front一端进行fifo
数组和链表两种实现方式
书上的代码给出的判断是否为栈满不对应该为top==size-1先top++再压栈的话空栈对应top应该为-1,这里不对
然后后面的弹栈操作top==-1后面先弹栈再-1的操作对,不是很严谨啊编排的时候
链接表
单链表,单向链表或者线性链表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。