继电保护算法分析

继电保护算法分析
继电保护算法分析

继电保护算法分析

1 引言

根据继电保护的原理可知,微机保护系统的核心内容即是如何采用适当而有效的保护算法提取出表征电气设备故障的信号特征分量。图1是目前在微机保护中通常采用的提取故障信号特征量的信号处理过程。

从图中可以看出,自故障信号输入至A/D 输出的诸环节由硬件实现,在此过程中故障信号经过了预处理(如由ALF 滤除信号中高于5次的谐波分量),然后通过保护算法从中提取出故障的特征分量(如基波分量)。很明显,只有准确且可靠地提取出故障的特征量,才能通过故障判据判断出是否发生了故障,是何种性质的故障,进而输出相应的保护动作。因此计算精度是正确作出保护反应的重要条件。就硬件部分而言,为了减少量化误差,通常采用12位甚至16位A/D 转换芯片;而就保护算法而言,提高精度除了与算法本身的性能有关,还与采样频率、数据窗长度和运算字长有关。目前针对故障特征的提取有许多不同类型的保护算法,本课题研究的是电动机和变压器的保护,根据相应的保护原理,主要涉及基于正弦量的算法和基于序分量过滤器的算法。本章将对其中几种较典型的算法作简要介绍和分析。 2 基于正弦量的特征提取算法分析 两点乘积算法

设被采样信号为纯正弦量,即假设信号中的直流分量和高次谐波分量均已被理想带通滤波器滤除。这时电流和电压可分别表示为:

)sin(20i t I i αω+=

故障

图1 故障信号特征的提取过程

和 )sin(20u t U u αω+= 表示成离散形式为:

)sin(2)(0i S S k T k I kT i i αω+== (1) )sin(2)(0u S S k T k U kT u u αω+== (2)

式中,ω为角频率,I 、U 为电流和电压的有效值,S T 为采样频率,0i α和0u α为电流和

电压的初相角。设1i 和2i 分别为两个相隔2

π

的采样点1n 和2n 处的采样值(图2),即: 212π

ωω=-S S T n T n

由式(1):

10111sin 2)sin(2)(i i S S I T n I T n i i ααω=+== (3) )sin(2)(0222i S S T n I T n i i αω+==

101cos 2)2

sin(2i i S I T n I ααπ

ω=++

= (4)

式中011i S i T n αωα+=为第n 1个采样时刻电流的相位角。

将式(3)和式(4)平方后相加可得:

2

22122i i I +=

由此可求得电流的有效值为:

2

2

2

21i i I +=

将式(3)和式(4)相除可求得S T n 1时刻的电流相位为:

kT S

图2 两点乘积算法的采样

2

11i i arctg

i =α 同理,由式(2)可得:

11sin 2u U u α= (5) 12cos 2u U u α= (6)

类似于电流的情况,由式(5)和式(6)可得:

2

2

1u u U +=

2

1

1u u arctg

u =α 式(3)~(6)表明,若输入量为纯正弦函数,只要得到任意两个相隔

2

π

的瞬时值,就可以计算出其有效值和相位。为了避免涉及三角函数,在计算测量阻抗时可采用复数法,即把电流和电压表示为:

1

1

1

1sin cos sin cos i i i i jU U U jI I I α

ααα+=+=

利用式(3)~(6)得:

1

21

2

ji i ju u I U Z ++== (7) 由式(7)可求得测量阻抗的电阻分量和电抗分量为:

2

2212

211i i u i u i R ++=

(8) 2

2

212

112i i u i u i X +-=

(9) 式(8)和式(9)中用到了两个采样点的乘积,故称为两点乘积算法。

该算法使用了两个相隔

的采样值,即算法本身所需的数据窗长度为4

1周期,在工频场合该长度为5mS ,这即是算法的响应时间。文献表明,用正弦量任何两点相邻的采样值都可以计算出有效值和相位角,亦即理论上两点乘积算法本身所需的数据窗可以是

很短的一个采样间隔,但事实上由于此时的算法公式将比前者复杂得多,实际应用中由于实现算法所需的运算时间加长反而抵消了采样间隔的缩短。此外,由于算法所针对的是纯正弦量,实际的故障信号很难满足这一要求,可见算法的精度严重依赖于信号波形的正弦度。因此,尽管算法本身没有理论误差,但为了使信号尽可能接近于正弦,必须通过数字滤波的方法先滤除信号中的高频分量,这将额外地增加很大的运算工作量,使实际的算法响应时间大大超过理论值。 导数算法

设电流和电压分别为:

)

sin(2)sin(200u i t U u t I i αωαω+=+=

则1t 时刻的电流和电压分别为:

1011sin 2)sin(2i i I t I i ααω=+= (10) 1011sin 2)sin(2u u U t U u ααω=+= (11)

式中011i i t αωα+=,011u u t αωα+=。 而1t 时刻电流和电压的导数分别为:

11

cos 2i I i αω=' 或 11

cos 2i I i αω

=' (12) 11

cos 2u U u αω=' 或 11

cos 2u U u αω

=' (13)

由式(10)~(13)可得:

基波有效值 2

1

2121??

? ??'+=ωi i I (14) 2

1

2121??

? ??'+=ωu u U (15)

阻抗分量 2

12111

11?

?

?

??'+'?

'+

=

ωωωi i u i i u R (16)

2

1211

1

1

1

?

?

? ??'+'-'=

ωωω

i i u i i u X (17) 可见,只要获得了电流电压在某一时刻的采样值和在该时刻的导数,就可以计算出相应的电流电压基波有效值、相位和阻抗。在微机的离散系统中,无法通过采样直接得到该点的导数,为此,可取t 1为两个相邻采样时刻k 和k +1的中间时刻,用差分近似表示该时刻的导数(图3)。即:

)(1

11

+-='k k S

i i T i (18) )(1

11

+-='k k S

u u T u (19) 这实际上是用直线ab 的斜率近似表示直线mn 的斜率,当S T 足够小时,这种近似将会有足够的精度。

从图3可以看到,t 1并不在采样点上,为了使采样值与导数尽可能在同一点上,对相邻两点采样值求平均值:

)(21

11++=k k i i i (20)

)(2

1

11++=k k u u u (21)

显然,当S T 足够小时,t 1与导数点将足够接近。

虽然与两点乘积算法相似,导数算法也使用了两个相邻的采样值,但其采样间隔很

k

k +1

t 1 0

kT S

图3 差分近似求导原理

小,因此算法的响应速度很快。由于算法在求导数时是用差分近似微分,即算法的精度与采样频率有关,所以采样频率越高则精度越高。此外,由于算法中采用了差分方法,对信号中的直流分量具有一定的滤除能力,但对高次谐波则具有放大作用,因此类似于两点乘积算法,该算法也需要通过数字滤波器滤除高次谐波,因而算法的实际响应速度主要取决于算法本身和数字滤波器的运算时间。 半周绝对值积分算法

半周绝对值积分算法的原理是依据一个正弦量在任意半个周期内绝对值积分为一常数S ,且积分值S 与积分起始点的初相位无关,如图4中两个从不同起始点算起的

半周内的两部分面积是相等的。即:

t td I

dt t I S T t ωωω

αωα

πα

α

sin 2)sin(22

??+=

+=

ω

ωωω

π

I

t td I

22sin 20

=

=?

(22)

由式(22)可求得基波分量的有效值为:

S I 2

=

(23)

式(23)的离散形式可以用梯形法或矩形法推出。如采用梯形法,可以设若干个小梯形面积之和为S '(图5),则有:

S T i i i i i i S N

N ????

?

?

?++++++='-222

2

2

12

110 S k k

T i i i N

N ???

?

????+??? ??+=∑-=11

0222

1

(24) 式中:0i ,1i ,,2

N i 为半周内的采样值,N 为一周内的采样点数,S T 为采样间隔(周

期)。式(24)是式(22)的近似,其精度与采样频率有关。当采样频率足够高(S T 足够小)时,误差也可以足够小,即S '与S 足够接近。

i (t

)(t i

半周积分算法需要的数据窗长度为10mS ,较两点乘积算法和导数算法长。但由于这种算法只有加法运算,算法的工作量很小,可以用低端MCU 实现。此外,算法本身具有一定的滤除高频分量的能力,因为叠加在基波分量上的高频分量(通常幅度不大)在半周积分中其对称的正负半周互相抵消,剩余的未被抵消部分所占的比重减小,极端情况(正负半周刚好相等)时,可以完全抵消。但该算法不能滤除直流分量,因此对于一些要求不高的保护场合可以采用该算法,必要时可以在前级配以简单的差分滤波器来滤除直流分量。

付立叶算法(付氏算法) 付氏算法的基本原理

付氏算法的基本思想来自付立叶级数,它假定被采样信号是一个周期时间函数,除了基波分量,还含有不衰减直流分量和高次谐波分量,可以表示为:

∑∑∞

=∞

=++=++=1

01

0)cos sin ()sin()(k k k k k k t k b t k a X t X X t x ωωαω (25)

式中:0X 为直流分量,k X 为k 次谐波分量的幅值,k α为k 次谐波分量的初相位,ω为基波角频率,k k k X a αcos =为k 次谐波的正弦分量系数,k k k X b αsin =为k 次谐波的余

图4 半周积分算法原理

t

图5 梯形法面积计算原理

弦分量系数。由付氏级数原理可求得系数k a 和k b 分别为:

???

?

???==??dt t k t x T b tdt

k t x T a T

k T

k 0

0cos )(2sin )(2

ωω 式中T 为x (t )的周期。由此可计算出各次谐波分量的幅值和初相位。继电保护中通常对基波分量感兴趣,此时基波(k =1)的正弦和余弦分量系数为:

?=T

tdt t x T a 01sin )(2

ω (26)

?=T

tdt t x T b 0

1cos )(2

ω (27)

基波分量的幅值和初相位分别为:

21211b a X += 1

1

1a b arctg

=α 根据数据窗的长度,在微机上实现式(26)和式(27)时可分为全波付氏算法和半波付氏算法。 全波付氏算法

微机实现时需对式(26)和式(27)离散化,分为矩形法和梯形法。设每周期采样点数为N ,则矩形法:

[]S S S S T N N x T x T x T T

a ωωωsin )(2sin )2(sin )1(2

1+++?=

∑==N k N

k k x T 12sin )(2π (28) []S S S S T N N x T x T x T T

b ωωωcos )(2cos )2(cos )1(2

1+++?=

∑==N k N

k k x T 12cos )(2π (29) 式中S T 为采样周期。当采样频率为S f ,基频为f 时,f

f N S

=。 梯形法:

???++++?=

22sin )2(sin )1(2sin )1(0sin )0(21S S S S T x T x T x x T T a ωωω ??

?

+--+

2sin )()1sin()1(S S T N N x T N N x ωω ∑-==112sin )(2N k N k k x T π

(30) ???++++?=

22cos )2(cos )1(2cos )1(0cos )0(21S

S S S T x T x T x x T T b ωωω ??

?

+--+

2cos )()1cos()1(S S T N N x T N N x ωω ???

???++=∑-=11

2)(2cos )(2)0(2N k N x N k k x x T π (31) 式中x (0)和x (N )分别是k =0和k =N 时的采样值。观察式(28)~(31)可知它们是非递归离散系统的一般表达式。矩形法算式比梯形法算式更为简洁,便于编程实现,但在相同的采样频率时,精度不如梯形法。 半波付氏算法

全波付氏算法的数据窗为一个工频周期(20mS ),响应时间较长。为了缩短响应时间,可将数据窗缩短至半个周期,从而得到半波付氏算法。设每周期的采样点数仍为N ,则根据式(26)和式(27)可得半波付氏算法的计算公式为:

矩形法: ∑==2112sin )(4N

k N

k k x N a π

(32)

∑==2112cos )(4N

k N

k

k x N b π

(33) 梯形法: ∑

-==

12

1

12sin )(4

N k N

k

k x N

a π

(34) ???

?????+

+=

∑=2112)2(2cos )(42

)0(4N k N x N k k x T x N

b π (35) 从滤波效果来看,全波付氏算法不仅能完全滤除各次谐波分量和稳定的直流分量,

而且能较好地滤除线路分布电容引起的高频分量,因而可以对畸变波形中的基波分量平稳和精确地作出响应。从图6可以看出,半波付氏算法的滤波效果不如全波付氏算法,它不能滤除直流分量和偶次谐波分量,即它需要假设信号中的直流分量已由前置ALF 滤除。此外,两者都对按指数衰减的非周期分量呈现了很宽的连续频谱,因此付氏算法的精度受衰减的非周期分量的影响较大。

从精度来看,由于半波付氏算法的数据窗为半周,在故障发生半周后即可计算出结果,但精度不如全波付氏算法。全波付氏算法则需要在故障发生一个周期后才能计算出结果,响应速度较慢,但其计算精度较高。文献表明,全波付氏算法不仅对基波,而且对所有通过防混迭滤波器的谐波都具有最小的协方差估计,因此是目前微机继电保护中最普遍采用的算法。 最小二乘算法

最小二乘算法的原理是为被采样信号预设一个尽可能逼近的信号模型函数,并按最小二乘拟合原理对其进行拟合。设被采样信号为:

∑∑==++=++=L

k ck sk L

k k k t k X t k X X t k X X t x 1

01

0)cos sin ()sin()(ωωαω (36)

式中:k k sk X X αcos =,k k ck X X αsin =。

可以看出,式(36)是式(25)的前1+L 项有限和表达式。当采样间隔为S

S f T 1

=时,则将N 个采样值1y ,2y ,

,N y 代入式(36)可以得到N 个方程,表示为矩阵形式:

1

f f

A( f

1

2

3

4

5

6

1

f f

A( f

1

2

3

4

5

6

(a)全波付氏算

(b)全波付氏算

图6 付氏算法的频谱

Y AX = (37)

其中:X T cL sL c s c s X X X X X X X ),,,,,,,(22110 =

Y ),,,(21N y y y = A ?

????

??

??

???=S S

S

S

S S S

S

S S

S S T NL T NL T N T N T L T L T T

T L T L T T ωωωωωωωωωωωωcos sin cos sin 12cos 2sin 2cos 2sin 1cos sin cos sin 1

根据最小二乘拟合原理,当误差

2δ[]=-=∑=2

1

)(N

k S k kT x y )()(AX Y AX Y T --

最小时,称AX 为y k 的最佳拟合函数。令

)()(2AX Y AX Y J T --==δ

求J 关于X 的导数并令其等于零:

022=-=??Y A AX A X

J

T T 即: Y A AX A T T = 由于A T A 是非奇异方阵,故可得:

Y A A A X T T 1)(-= (38)

式(37)中的矩阵A 的各元素均不含未知量,当采样频率f S 和采样点数N 确定时,求解式(38)可以预先将(A T A )1A T 离线计算出来存于内存中。

最小二乘算法类似于全波付氏算法,可以从信号计算出所需的各次谐波分量,但它还具有以下特点:

1. 最小二乘算法是一种波形拟合方法,当预设的信号模型能充分描述被采样信号时,这种算法可以滤除信号中任意需要滤除的分量,因而具有很好的滤波性能和很高的运算精度。显然滤波性能和精度依赖于预设信号模型的复杂度,即模型对实际信号描述的充分性,这将导致出现高阶矩阵,使运算量明显增大,对运算(硬件)平台的要求较高。

2. 可以通过预设合适的模型,一次计算出信号中各种所需的分量。例如在变压器差动保护中,不仅需要计算出基波分量的大小,还需要计算出二次谐波分量(用于励磁涌流

制动)和三次谐波或五次谐波分量(用于过励磁制动)。

4 小结

通过保护算法提取故障信号中的特征分量是微机继电保护中最重要的环节,本文针对性地阐述了一些典型保护算法的原理,分析了它们各自的功能特点、性能和应用场合,表明:

1. 保护算法与滤波是密切相关的,保护系统中的模拟滤波器和数字滤波器的完善程度不同,所选用的保护算法也因之而异,通常有些算法本身就具有良好的滤波功能。

2. 就算法本身而言,其运算的精度和速度是一对矛盾,较高的精度必然伴随着较低的速度,精度和速度兼具的算法则表现为运算的复杂性,从而将速度问题转至硬件实现平台,归结为CPU的运行速度和处理能力。

3. 就系统硬件而言,A/D转换芯片的量化误差将直接影响到故障信号特征的提取精度,因而通常需要采用高精度的A/D(12位甚至16位)以减小量化误差。而这又会使运算字长变长,对速度和CPU处理能力产生影响。

算法分析与设计复习题及参考答案

网络教育课程考试复习题及参考答案算法分析与设计一、名词解释:1.算法 2.程序 3.递归函数 4.子问题的重叠性质 5.队列式分支限界法 6.多机调度问题7.最小生成树二、简答题: 1.备忘录方法和动态规划算法相 比有何异同?简述之。 2.简述回溯法解题的主要步骤。 3.简述动态规划算法求解的基本要素。 4.简述回溯法的基本思想。 5.简要分析在递归算法中消除递归调用,将递归算法转化为非递归算法的方法。 6.简要分析分支限界法与回溯法的异同。7.简述算法复杂性的概念,算法复杂性度量主要指哪两个方面?8.贪心算法求解的问题主要具有哪些性质?简述之。9.分治法的基本思想是什么?合并排序的基本思想是什么?请分别简述之。10.简述分析贪心算法与动态规划 算法的异同。三、算法编写及算法应用分析题: 1.已知有3个物品: (w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10),背包的容积M=20,根据0-1背包动态规划的递推式求出最优解。 2.按要求完成以下关于排序和查找的问题。①对数组A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递减序。②请描述递减数组进行二分搜索的基本思想,并给出非递归算法。③给出上述算法的递归算法。④使用上述算法对①所得到的结果搜索如下元素,并给出搜索过程:18,31,135。已知,=1,2,3,4,5,6,=5,=10,=3,=12,=5,=50,=6,kijr*r1234567ii1求矩阵链积A×A×A×A×A×A的最佳求积顺序(要求给出计算步骤)。1234564.根据分枝限界算法基本过程,求解0-1背包问题。已知n=3,M=20,(w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10)。 5.试用贪心算法求解汽车加油问题:已知一辆汽车加满油后可行驶n公里,而旅途中有若干个加油站。试设计一个有效算法,指出应在哪些加油站停靠加油,使加油次数最少,请写出该算法。6.试用动态规划算法实现下列问题:设A和B是两个字符串。我们要用最少的字符操作,将字符串A转换为字符串B,这里所说的字符操作包括:①删除一个字符。②插入一个字符。③将一个字符改为另一个字符。请写出该算法。7.对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径。be2g212ad323182cf2h 8.试写出用分治法对数组A[n]实现快速排序的算法。9.有n个活动争用一个活动室。已知活动i占用的时间区域为[s,f ],活动i,j相容的条件是:sj≥f ii,问题的解表示为(x| x =1,2…,n,),x表示顺序为i的活动编号活动,求一个相容的活动子集,iiii且安排的活动数目最多。xxx10.设、、是一个三角形的三条边,而且x+x+x=14。请问有多少种不同的三角形?给出解答过程。12312311.

算法分析与设计总结

第一章算法概述 1.算法:解决问题的一种方法或过程;由若干条指令组成的有穷指令。 2.算法的性质: 1)输入:有零个或多个输入 2)输出:有至少一个输出 3)确定性:每条指令是清晰的、无歧义的 4)有限性:每条指令的执行次数和时间都是有限的 3.算法与程序的区别 程序是算法用某种程序设计语言的具体实现 程序可以不满足算法的有限性 4.算法复杂性分析 1)算法的复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复 杂性,需要空间资源的量称为空间复杂性 2)三种时间复杂性:最坏情况、最好情况、平均情况 3)可操作性最好且最有实际价值的是最坏情况下的时间复杂性 第二章递归与分支策略 1.递归概念:直接或间接调用自身的算法 2.递归函数:用函数自身给出定义的函数 3.递归要素:边界条件、递归方程 4.递归的应用 ?汉诺塔问题 void Hanuo(int n,int a,int b,int c) { if(n==1) return; Hanuo(n-1,a,c,b); move(a,b) Hanuo(n-1,c,b,a); } ?全排列问题 void Perm(Type list[],int k,int m) { //产生list[k,m]的所有排列 if(k == m) { for(int i = 0;I <= m;i++) cout<

各种排序算法比较

排序算法 一、插入排序(Insertion Sort) 1. 基本思想: 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。 2. 排序过程: 【示例】: [初始关键字] [49] 38 65 97 76 13 27 49 J=2(38) [38 49] 65 97 76 13 27 49 J=3(65) [38 49 65] 97 76 13 27 49 J=4(97) [38 49 65 97] 76 13 27 49 J=5(76) [38 49 65 76 97] 13 27 49 J=6(13) [13 38 49 65 76 97] 27 49 J=7(27) [13 27 38 49 65 76 97] 49 J=8(49) [13 27 38 49 49 65 76 97] Procedure InsertSort(Var R : FileType); //对R[1..N]按递增序进行插入排序, R[0]是监视哨// Begin for I := 2 To N Do //依次插入R[2],...,R[n]// begin R[0] := R[I]; J := I - 1; While R[0] < R[J] Do //查找R[I]的插入位置// begin R[J+1] := R[J]; //将大于R[I]的元素后移// J := J - 1 end R[J + 1] := R[0] ; //插入R[I] // end End; //InsertSort // 二、选择排序 1. 基本思想: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 2. 排序过程: 【示例】: 初始关键字[49 38 65 97 76 13 27 49] 第一趟排序后13 [38 65 97 76 49 27 49] 第二趟排序后13 27 [65 97 76 49 38 49] 第三趟排序后13 27 38 [97 76 49 65 49] 第四趟排序后13 27 38 49 [49 97 65 76] 第五趟排序后13 27 38 49 49 [97 97 76]

几种排序算法分析

《几种排序算法的分析》 摘要: 排序算法是在C++中经常要用到的一种重要的算法。如何进行排序,特别是高效率的排序是是计算机应用中的一个重要课题。同一个问题可以构造不同的算法,最终选择哪一个好呢?这涉及如何评价一个算法好坏的问题,算法分析就是评估算法所消耗资源的方法。可以对同一问题的不同算法的代价加以比较,也可以由算法设计者根据算法分析判断一种算法在实现时是否会遇到资源限制的问题。排序的目的之一就是方便数据的查找。在实际生活中,应根据具体情况悬着适当的算法。一般的,对于反复使用的程序,应选取时间短的算法;对于涉及数据量较大,存储空间较小的情况则应选取节约存储空间的算法。本论文重点讨论时间复杂度。时间复杂度就是一个算法所消耗的时间。算法的效率指的是最坏情况下的算法效率。 排序分为内部排序和外部排序。本课程结业论文就内部排序算法(插入排序,选择排序,交换排序,归并排序和基数排序)的基本思想,排序步骤和实现算法等进行介绍。 本论文以较为详细的文字说明,表格对比,例子阐述等方面加以比较和总结,通过在参加数据的规模,记录说带的信息量大小,对排序稳定的要求,关键字的分布情况以及算法的时间复杂度和空间复杂度等方面进行比较,得出它们的优缺点和不足,从而加深了对它们的认识和了解,进而使自己在以后的学习和应用中能够更好的运用。

1.五种排序算法的实例: 1.1.插入排序 1.1.1.直接插入排序 思路:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。 要点:设立哨兵,作为临时存储和判断数组边界之用。 实现: Void InsertSort(Node L[],int length) { Int i,j;//分别为有序区和无序区指针 for(i=1;i=1)//直到增量缩小为1 { Shell(L,d); d=d/2;//缩小增量 } } Void Shell(Node L[],int d) {

算法设计与分析复习题目及答案

一。选择题 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( B )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4、在下列算法中有时找不到问题解的是( B )。 A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法 5. 回溯法解旅行售货员问题时的解空间树是( B )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 7、衡量一个算法好坏的标准是(C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 8、以下不可以使用分治法求解的是(D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 9. 实现循环赛日程表利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 10、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法 11.下面不是分支界限法搜索方式的是( D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 13.备忘录方法是那种算法的变形。( B )

各种排序算法的总结和比较

各种排序算法的总结和比较 1 快速排序(QuickSort) 快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。 (1)如果不多于1个数据,直接返回。 (2)一般选择序列最左边的值作为支点数据。(3)将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。 (4)对两边利用递归排序数列。 快速排序比大部分排序算法都要快。尽管我们可以在某些特殊的情况下写出比快速排序快的算法,但是就通常情况而言,没有比它更快的了。快速排序是递归的,对于内存非常有限的机器来说,它不是一个好的选择。 2 归并排序(MergeSort)

归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。 3 堆排序(HeapSort) 堆排序适合于数据量非常大的场合(百万数据)。 堆排序不需要大量的递归或者多维的暂存数组。这对于数据量非常巨大的序列是合适的。比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。 堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。

Shell排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数。平均效率是O(nlogn)。其中分组的合理性会对算法产生重要的影响。现在多用D.E.Knuth的分组方法。 Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort,HeapSort慢很多。但是它相对比较简单,它适合于数据量在5000以下并且速度并不是特别重要的场合。它对于数据量较小的数列重复排序是非常好的。 5 插入排序(InsertSort) 插入排序通过把序列中的值插入一个已经排序好的序列中,直到该序列的结束。插入排序是对冒泡排序的改进。它比冒泡排序快2倍。一般不用在数据大于1000的场合下使用插入排序,或者重复排序超过200数据项的序列。

算法设计与分析书中程序

【程序5-1】分治法 SolutionType DandC(ProblemType P) { ProblemType P1,P2, ,P k。 if (Small(P)) return S(P)。//子问题P足够小,用S(P)直接求解 else { Divide(P,P1,P2, ,P k)。//将问题P分解成子问题P1, P2, …,P k Return Combine(DandC(P1),DandC(P2),…,DandC(P k))。//求解子问题,并合并解 } } 【程序5-2】一分为二的分治法 SolutionType DandC(int left,int right) { if (Small(left,right)) return S(left,right)。 else { int m=Divide(left,right)。//以m为界将问题分解成两个子问题Return Combine(DandC(left,m),DandC(m+1,right))。//分别求解子问题,并合并解 } } 【程序5-3】可排序表类 template struct E { //可排序表中元素的类型 operator K()const { return key。} //重载类型转换运算符 K key。//关键字可以比较大小 D data。//其他数据 }。 template class SortableList { //可排序表类 public: SortableList(int mSize) //构造函数 { maxSize=mSize。 l=new T[maxSize]。 n=0。

几种排序算法的平均性能比较(实验报告)

实验课程:算法分析与设计 实验名称:几种排序算法的平均性能比较(验证型实验) 实验目标: (1)几种排序算法在平均情况下哪一个更快。 (2)加深对时间复杂度概念的理解。 实验任务: (1)实现几种排序算法(selectionsort, insertionsort,bottomupsort,quicksort, 堆排序)。对于快速分类,SPLIT中的划分元素采用三者A(low),A(high),A((low+high)/2)中其值居中者。 (2)随机产生20组数据(比如n=5000i,1≤i≤20)。数据均属于围(0,105)的整数。 对于同一组数据,运行以上几种排序算法,并记录各自的运行时间(以毫秒为单位)。(3)根据实验数据及其结果来比较这几种分类算法的平均时间和比较次数,并得出结论。实验设备及环境: PC;C/C++等编程语言。 实验主要步骤: (1)明确实验目标和具体任务; (2)理解实验所涉及的几个分类算法; (3)编写程序实现上述分类算法; (4)设计实验数据并运行程序、记录运行的结果; (5)根据实验数据及其结果得出结论; (6)实验后的心得体会。 问题分析(包括问题描述、建模、算法的基本思想及程序实现的技巧等): 选择排序:令A[1…n]为待排序数组,利用归纳法,假设我们知道如何对后n-1个元素排序, 即对啊[A…n]排序。对某个j,1<=j<=n,设A[j]是最小值。首先,如果就!=1,我们交换A[1] 和A[j]。然后由假设,已知如何对A[2..n]排序,因此可对在A[2…n]中的元素递归地排序。 可把递归改为迭代。算法程序实现如下: void SelectionSort(int *Array,int n,int &c) { int i,j,k; int aa; c=0; for(i=0;i

算法分析与设计

专业: 班级: 学号: 姓名: 日期: 2014年 11月 10日

48476Λn n 111+++=。 2、q(n ,m)=q(n ,n),m>=n 。 最大加数n1实际上不能大于n ,因此,q(1,m)=1。 3、q(n ,n)=1+q(n ,n-1)。 正整数n 的划分由n1=n 的划分和n1<=n-1的划分组成。 4、q(n ,m)= q(n ,m-1)+q(n-m ,m),n>m>1。 正整数n 的最大加数n1不大于m 的划分由n1=m 的划分和n1<=m-1的划分组成。 (2)、算法描述 public class 张萌 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out .println(q (2,2)); } public static int q(int n,int m) { if ((n<1)||(m<1)) return 0; if ((n==1)||(m==1)) return 1; if (n

几种常见内部排序算法比较

常见内部排序算法比较 排序算法是数据结构学科经典的内容,其中内部排序现有的算法有很多种,究竟各有什么特点呢?本文力图设计实现常用内部排序算法并进行比较。分别为起泡排序,直接插入排序,简单选择排序,快速排序,堆排序,针对关键字的比较次数和移动次数进行测试比较。 问题分析和总体设计 ADT OrderableList { 数据对象:D={ai| ai∈IntegerSet,i=1,2,…,n,n≥0} 数据关系:R1={〈ai-1,ai〉|ai-1, ai∈D, i=1,2,…,n} 基本操作: InitList(n) 操作结果:构造一个长度为n,元素值依次为1,2,…,n的有序表。Randomizel(d,isInverseOrser) 操作结果:随机打乱 BubbleSort( ) 操作结果:进行起泡排序 InserSort( ) 操作结果:进行插入排序 SelectSort( ) 操作结果:进行选择排序 QuickSort( ) 操作结果:进行快速排序 HeapSort( ) 操作结果:进行堆排序 ListTraverse(visit( )) 操作结果:依次对L种的每个元素调用函数visit( ) }ADT OrderableList 待排序表的元素的关键字为整数.用正序,逆序和不同乱序程度的不同数据做测试比较,对关键字的比较次数和移动次数(关键字交换计为3次移动)进行测试比较.要求显示提示信息,用户由键盘输入待排序表的表长(100-1000)和不同测试数据的组数(8-18).每次测试完毕,要求列表现是比较结果. 要求对结果进行分析.

详细设计 1、起泡排序 算法:核心思想是扫描数据清单,寻找出现乱序的两个相邻的项目。当找到这两个项目后,交换项目的位置然后继续扫描。重复上面的操作直到所有的项目都按顺序排好。 bubblesort(struct rec r[],int n) { int i,j; struct rec w; unsigned long int compare=0,move=0; for(i=1;i<=n-1;i++) for(j=n;j>=i+1;j--) { if(r[j].key

算法分析与设计

第一章 什么是算法 算法是解决一个计算问题的一系列计算步骤有序、合理的排列。对一个具体问题(有确定的输入数据)依次执行一个正确的算法中的各操作步骤,最终将得到该问题的解(正确的输出数据)。 算法的三个要素 1).数据: 运算序列中作为运算对象和结果的数据. 2).运算: 运算序列中的各种运算:赋值,算术和逻辑运算 3).控制和转移: 运算序列中的控制和转移. 算法分类 从解法上:数值型算法:算法中的基本运算为算术运算;非数值型算法:算法中的基本运算为逻辑运算. 从处理方式上:串行算法:串行计算机上执行的算法;并行算法:并行计算机上执行的算法 算法的五个重要的特性 (1) 有穷性:在有穷步之后结束。 (2) 确定性:无二义性。 (3) 可行性:可通过基本运算有限次执行来实现。 (4) 有输入 表示存在数据处理 (5) 有输出 伪代码 程序设计语言(PDL ),也称为结构化英语或者伪代码,它是一种混合语言,它采用一种语言(例如英语)的词汇同时采用类似另外一种语言(例如,结构化程序语言)的语法。 特点:1)使用一些固定关键词的语法结构表达了结构化构造、数据描述、模块的特征; 2)以自然语言的自由语法描述了处理过程;3)数据声明应该既包括简单的也包括复杂的数据结构;4)使用支持各种模式的接口描述的子程序定义或者调用技术。 求两个n 阶方阵的相加C=A+B 的算法如下,分析其时间复杂度。 #define MAX 20 ∑∑∑∑-=-=-=-=====102101010*11n i n i n i n j n n n n n n n n )O()1O(1O(11i i j i j ==∑∑==))O(N )21O()O()O(21N 1=+=∑=∑==)(N N i i N i i 赋值,比较,算术运算,逻辑运算,读写单个变量(常量)只需1单位时间 2). 执行条件语句 if c then S1 else S2 的时间为TC +max(TS1,TS2). 3). 选择语句 case A of a1: s1;a2: s2;...; am: sm 需要的时间为 max (TS1,TS2 ,..., TSm ). 4). 访问数组的单个分量或纪录的单个域需要一个单位时间. 5). 执行for 循环语句的时间=执行循环体时间*循环次数. 6). while c do s (repeat s until c)语句时间=(Tc+Ts)*循环次数. 7). 用goto 从循环体内跳到循环体末或循环后面的语句时,不需额外时间 8). 过程或函数调用语句:对非递归调用,根据调用层次由里向外用规则1-7进行分析; 对递归调用,可建立关于T(n)的递归方程,求解该方程得到T(n).

算法设计与分析所有程序

目录 第二章递归与分治 (3) 1、用递归思想求N! (3) 2、用递归思想求Fibonacci数列 (3) 3、用递归思想求排列问题 (4) 4、用递归思想求整数划分问题 (5) 5、用递归思想求汉诺塔问题 (6) 6、用递归思想实现插入排序 (7) 7、用分治思想实现二分查找 (8) 8、用分治法求两个大整数的乘法 (9) 9、用分治思想求一个数组的最大值与最小值 (10) 10、用分法思想实现合并排序 (12) 11、用分治思想实现快速排序 (13) 12、用分治法实现线性时间选择问题 (15) 13、用分法思想实现残缺棋盘问题 (15) 第三章动态规划法 (18) 1、矩阵连乘问题 (18) 2、最长公子序列 (20) 3、最大子段和问题 (23) 4、图像压缩问题 (28) 5、电路布线问题 (31) 6、最 (31) 7、最 (31) 第四章贪心算法 (32) 1、哈夫曼编码 (32) 4、Kruskal算法求最小生成树 (35) 5、集装箱问题 (38) 6、活动安排问题 (40) 第五章回溯法 (42) 1、用回溯法求0-1背包问题 (42)

2、用回溯法求N皇后问题 (45) 3、用回溯法求旅行售货员问题 (46) 4、用回溯法求圆排列问题 (48) 5、用回溯法求符号三角形问题 (50) 6、用回溯法求批处理作业调度问题 (52) 7、用回溯法求连续邮资问题 (54) 8、用回溯法求图的m着色问题 (57) 9、用回溯法求最大团问题 (59) 第六章回溯法 (62) 1、用分支限界法求0-1背包问题 (62)

第二章递归与分治1、用递归思想求N! 王晓东版——《计算机算法设计与分析(第四版)》P11页,例2-1 2、用递归思想求Fibonacci数列 王晓东版——《计算机算法设计与分析(第四版)》P12页,例2-2

五种排序算法的分析与比较

五种排序算法的分析与比较 广东医学院医学信息专业郭慧玲 摘要:排序算法是计算机程序设计广泛使用的解决问题的方法,研究排序算法具有重要的理论意义和广泛的应用价值。文章通过描述冒泡、选择、插入、归并和快速5种排序算法,总结了它们的时间复杂度、空间复杂度和稳定性。通过实验验证了5种排序算法在随机、正序和逆序3种情况下的性能,指出排序算法的适用原则,以供在不同条件下选择适合的排序算法借鉴。 关键词:冒泡排序;选择排序;插入排序;归并排序;快速排序。 排序是计算机科学中基本的研究课题之一,其目的是方便记录的查找、插入和删除。随着计算机的发展与应用领域的越来越广,基于计算机硬件的速度和存储空间的有限性,如何提高计算机速度并节省存储空间一直成为软件设计人员的努力方向。其中,排序算法已成为程序设计人员考虑的因素之一[1],排序算法选择得当与否直接影响程序的执行效率和内外存储空间的占用量,甚至影响整个软件的综合性能。排序操作[2,3],就是将一组数据记录的任意序列,重新排列成一个按关键字有序的序列。而所谓排序的稳定性[4]是指如果在排序的序列中,存在前后相同的两个元素,排序前和排序后他们的相对位臵不发生变化。 1 算法与特性 1.1冒泡排序 1.1.1冒泡排序的基本思想

冒泡排序的基本思想是[5,6]:首先将第1个记录的关键字和第2个记录的关键字进行比较,若为逆序,则将2个记录交换,然后比较第2个和第3个记录的关键字,依次类推,直至n-1个记录和第n个记录的关键字进行过比较为止。然后再按照上述过程进行下一次排序,直至整个序列有序为止。 1.1.2冒泡排序的特性 容易判断冒泡排序是稳定的。可以分析出它的效率,在最好情况下,只需通过n-1次比较,不需要移动关键字,即时间复杂度为O(n)(即正序);在最坏情况下是初始序列为逆序,则需要进行n-1次排序,需进行n(n-1)/2次比较,因此在最坏情况下时间复杂度为O(n2),附加存储空间为O(1)。 1.2选择排序 1.2.1选择排序的基本思想 选择排序的基本思想是[5,6]:每一次从待排序的记录中选出关键字最小的记录,顺序放在已排好序的文件的最后,直到全部记录排序完毕.常用的选择排序方法有直接选择排序和堆排序,考虑到简单和易理解,这里讨论直接选择排序。直接选择排序的基本思想是n个记录的文件的直接排序可经过n-1次直接选择排序得到有序结果。 1.2.2选择排序的特性 容易得出选择排序是不稳定的。在直接选择排序过程中所需进行记录移动的操作次数最少为0,最大值为3(n-1)。然而,无论记录的初始排序如何,所需进行的关键字间的比较次数相同,均为n(n-1)/2,时间

算法分析与设计习题集整理

算法分析与设计习题集整理 第一章算法引论 一、填空题: 1、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。 2、多项式10()m m A n a n a n a =+++L 的上界为O(n m )。 3、算法的基本特征:输入、输出、确定性、有限性 、可行性 。 4、如何从两个方面评价一个算法的优劣:时间复杂度、空间复杂度。 5、计算下面算法的时间复杂度记为: 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]= c[i][j]+a[i][k]*b[k][j]; } 6、描述算法常用的方法:自然语言、伪代码、程序设计语言、流程图、盒图、PAD 图。 7、算法设计的基本要求:正确性 和 可读性。 8、计算下面算法的时间复杂度记为: O(n 2) 。 for (i =1;i

几种排序算法的分析与比较--C语言

一、设计思想 插入排序:首先,我们定义我们需要排序的数组,得到数组的长度。如果数组只有一个数字,那么我们直接认为它已经是排好序的,就不需要再进行调整,直接就得到了我们的结果。否则,我们从数组中的第二个元素开始遍历。然后,启动主索引,我们用curr当做我们遍历的主索引,每次主索引的开始,我们都使得要插入的位置(insertIndex)等于-1,即我们认为主索引之前的元素没有比主索引指向的元素值大的元素,那么自然主索引位置的元素不需要挪动位置。然后,开始副索引,副索引遍历所有主索引之前的排好的元素,当发现主索引之前的某个元素比主索引指向的元素的值大时,我们就将要插入的位置(insertIndex)记为第一个比主索引指向元素的位置,跳出副索引;否则,等待副索引自然完成。副索引遍历结束后,我们判断当前要插入的位置(insertIndex)是否等于-1,如果等于-1,说明主索引之前元素的值没有一个比主索引指向的元素的值大,那么主索引位置的元素不要挪动位置,回到主索引,主索引向后走一位,进行下一次主索引的遍历;否则,说明主索引之前insertIndex位置元素的值比主索引指向的元素的值大,那么,我们记录当前主索引指向的元素的值,然后将主索引之前从insertIndex位置开始的所有元素依次向后挪一位,这里注意,要从后向前一位一位挪,否则,会使得数组成为一串相同的数字。最后,将记录下的当前索引指向的元素的值放在要插入的位置(insertIndex)处,进行下一次主索引的遍历。继续上面的工作,最终我们就可以得到我们的排序结果。插入排序的特点在于,我们每次遍历,主索引之前的元素都是已经排好序的,我们找到比主索引指向元素的值大的第一个元素的位置,然后将主索引指向位置的元素插入到该位置,将该位置之后一直到主索引位置的元素依次向后挪动。这样的方法,使得挪动的次数相对较多,如果对于排序数据量较大,挪动成本较高的情况时,这种排序算法显然成本较高,时间复杂度相对较差,是初等通用排序算法中的一种。 选择排序:选择排序相对插入排序,是插入排序的一个优化,优化的前提是我们认为数据是比较大的,挪动数据的代价比数据比较的代价大很多,所以我们选择排序是追求少挪动,以比较次数换取挪动次数。首先,我们定义我们需要排序的数组,得到数组的长度,定义一个结果数组,用来存放排好序的数组,定义一个最小值,定义一个最小值的位置。然后,进入我们的遍历,每次进入遍历的时候我们都使得当前的最小值为9999,即认为每次最小值都是最大的数,用来进行和其他元素比较得到最小值,每次认为最小值的位置都是0,用来重新记录最小值的位置。然后,进入第二层循环,进行数值的比较,如果数组中的某个元素的值比最小值小,那么将当前的最小值设为元素的值,然后记录下来元素的位置,这样,当跳出循环体的时候,我们会得到要排序数组中的最小值,然后将最小值位置的数值设置为9999,即我们得到了最小值之后,就让数组中的这个数成为最大值,然后将结果数组result[]第主索引值位置上的元素赋值为最小值,进行下一次外层循环重复上面的工作。最终我们就得到了排好序的结果数组result[]。选择排序的优势在于,我们挪动元素的次数很少,只是每次对要排序的数组进行整体遍历,找到其中的最小的元素,然后将改元素的值放到一个新的结果数组中去,这样大大减少了挪动的次序,即我们要排序的数组有多少元素,我们就挪动多少次,而因为每次都要对数组的所有元素进行遍历,那么比较的次数就比较多,达到了n2次,所以,我们使用选择排序的前提是,认为挪动元素要比比较元素的成本高出很多的时候。他相对与插入排序,他的比较次数大于插入排序的次数,而挪动次数就很少,元素有多少个,挪动次数就是多少个。 希尔排序:首先,我们定义一个要排序的数组,然后定义一个步长的数组,该步长数组是由一组特定的数字组成的,步长数组具体得到过程我们不去考虑,是由科学家经过很长时间计算得到的,已经根据时间复杂度的要求,得到了最适合希尔排序的一组步长值以及计算

算法设计与分析基础课后习题答案

Program算法设计与分析基础中文版答案 习题 5..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立. Hint: 根据除法的定义不难证明: 如果d整除u和v, 那么d一定能整除u±v; 如果d整除u,那么d也能够整除u的任何整数倍ku. 对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也一定能整除m=r+qn和n。 数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。故gcd(m,n)=gcd(n,r) 6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次? Hint: 对于任何形如0<=m

设sqrt(x)是求平方根的函数) 算法Quadratic(a,b,c) 描述将十进制整数表达为二进制整数的标准算法 a.用文字描述 b.用伪代码描述 解答: a.将十进制整数转换为二进制整数的算法 输入:一个正整数n 输出:正整数n相应的二进制数 第一步:用n除以2,余数赋给Ki(i=0,1,2...),商赋给n 第二步:如果n=0,则到第三步,否则重复第一步 第三步:将Ki按照i从高到低的顺序输出 b.伪代码 算法 DectoBin(n) .n]中 i=1 while n!=0 do { Bin[i]=n%2; n=(int)n/2; i++; } while i!=0 do{ print Bin[i]; i--; } 9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.(算法略)对这个算法做尽可能多的改进. 算法 MinDistance(A[0..n-1])

算法分析与设计-课程设计报告

XXXX大学 算法设计与分析课程设计报告 院(系): 年级: 姓名: 专业:计算机科学与技术 研究方向:互联网与网络技术 指导教师: XXXX 大学

目录 题目1 电梯调度 (1) 1.1 题目描述 (1) 1.2 算法文字描述 (1) 1.3 算法程序流程 (4) 1.4 算法的程序实现代码 (10) 题目2 切割木材 (12) 2.1题目描述 (12) 2.2算法文字描述 (12) 2.3算法程序流程 (13) 2.4算法的程序实现代码 (18) 题目3 设计题 (20) 3.1题目描述 (20) 3.2 输入要求 (20) 3.3输出要求 (20) 3.4样例输入 (20) 3.5样例输出 (20) 3.6测试样例输入 (21) 3.7测试样例输出 (21) 3.8算法实现的文字描述 (21) 3.9算法程序流程 (22) 3.10算法的程序实现代码 (23) 算法分析与设计课程总结 (26) 参考文献 (27)

题目1电梯调度 1.1 题目描述 一栋高达31层的写字楼只有一部电梯,其中电梯每走一层需花费4秒,并且在每一层楼停靠的时间为10秒,乘客上下一楼需要20秒,在此求解最后一位乘客到达目的楼层的最短时间以及具体的停靠计划。例如:此刻电梯停靠需求为4 5 10(有三位乘客,他们分别想去4楼、5楼和10楼),如果在每一层楼都停靠则三位乘客到达办公室所需要的时间为3*4=12秒、4*4+10=26秒、4*9+2*10=56秒,则最后一位乘客到达办公室的时间为56秒,相应的停靠计划为4 5 10均停靠。对于此测试用例电梯停靠计划方案:4 10,这样到第4楼的乘客所需时间为3*4=12秒,到第5楼的乘客所需时间为3*4+20=32秒,到第10楼的乘客所需时间为9*4+10=46秒,即最后到达目的楼层的顾客所需时间为46秒。 输入要求: 输入的第1行为整数n f1 f2 … fn,其中n表示有n层楼需要停靠,n=0表示没有更多的测试用例,程序终止运行。f1 f2 … fn表示需要停靠的楼层(n<=30,2<=f1

解析算法和程序实现教学设计Word版

解析算法及程序实现教学设计 一、设计思想 根据《新课标》的要求,本课“解析算法”的学习目的是使学生进一步体验算法设计思想。为了让学生更易理解其算法的思想:用解析法找出数学表达式,用它来描述问题的原始数据与结果之间的关系。本堂课的设计思路:通过一元二次方程求解实例引入主题——认知主题——实践体验主题——扩展与提高这几个阶段层层深入的递进式方法使学生充分掌握解析算法。从而使学生形成解析算法的科学逻辑结构。 二、教材分析 本课的课程标准内容: 结合实例,经历分析问题、确定算法、编程求解等用计算机解决问题的基本过程,认识算法和程序设计在其中的地位和作用。掌握使用解析算法设计程序解决问题的方法基本要求:1.初步掌握解析算法。2.初步掌握解析算法的程序实现。 教材中很多例子,但是考虑到课时,具体采用了“计算1900年开始的任意一天是星期几”的问题。 三、学情分析 学生对程序的3种基本模式已有一个了解的基础,对于简单的程序段也有一定的认知意识。并且已学习了枚举算法,这对本节课的教学产生积极的作用。但学生还是会觉得算法设计比较难掌握,困难之处在于,如何将题目的设计思想转化为流程图,根据流程图写出相应的代码并通过自己编制程序上机实践来体验。因此在课堂分析过程中,学生应当从听课认识——分析理解——实践探究这些过程中全面掌握解析算法的设计思想,并能用此算法来解决日常生活问题及与其他学科有所关联的一些简单问题。 四、教学目标 知识与技能:理解解析算法的概念和特点,通过分析了解解析算法的解题结构,初步掌握对解析算法的程序实现。 过程与方法:通过具体问题分析,归纳解析算法的基本思想和方法,确定解题步骤。让学生理解如何用3步法来解决实际问题(提出问题——分析问题——解决问题); 情感态度与价值观:通过小组合作,增进学生间的学习交流,培养合作能力,激发学生学习能动性;感受解析算法的魅力,养成始终坚持、不断积累才能获得成功的意志品质。 五、重点与难点 重点:通过计算1900年开始的任意一天是星期几,让学生理解解析算法的思想,初步

相关文档
最新文档