在大专院校的计算机课程里面,算法的时间复杂度一般是在数据结构课程中才开始学习,教师在《高级语言程序设计》课程的教学中往往容易忽略对学生论及算法优化。本文从“百钱买百鸡”与“求完数”两个编程实例谈算法优化,尝试从简单的例子让学生掌握时间复杂度和算法优化的重要性。
20 0 8年 1月
广西轻工业
维普资讯 http://doc.xuehai.net
第 1 (期总第 1 0 ) 期 1
G A G IO R A FL H D SR U N X JUN LO I TI UTY G N
计算机与信息技术
从“百钱买百鸡"求完数"与“问题浅谈算法优化
陆深焕
(汕头职业技术学院计算机系,广东汕头 5 7 ) l 0 8 5
【摘要】在大专院校的计算 机课程里面,算法的时间复杂度一般是在数据结构课程中才开始学习,教师在《高级语言程
序设计》课程的教学中往往容易忽略对学生论及算法优化。本文从“百钱买百鸡”求完数”与“两个编程实例谈算法优化,尝试从简 单的例子让学生掌握时间复杂度和算法优化的重要性。
【关键词】算时间法;复杂度;优化;数算法完【中图分类号】 T 3 1 P9 【文献标识码】 A
1算法的时间复杂度与算法优化
算法是指对解题方案的准确而完整描述。
【文章编号】 10—63 08 1 0 8— 2 0327( 0)— 00 0 2 0
1 0 1 0 1 0 1 0万次。 0"0" 0= 0这个问题“规模”不大,以程序在计所
算机上可以很快执行完。 解法 2数学能力稍强的学生就会想到, (公鸡的个数不会超过 2个, 0母鸡的个数不会超过 3个, 3所以会写出第二个解法 ):
cas u d e 2 ls n rd{ H p bi s t i i(t n g[{ u l ai v d c t c o manSr g rs) i a]
i oc nt c k; i the n n; i hi k; ntc c
算法有易读性、壮性和高效率的设计要求。其中高效率健的一个度量就是算法的时间复杂度,算法时间复杂度是指执行算法所需要的计算工作量。 简单来说,算法优化是指保证算法的正确性和可读性的基础上,尽量提高算法的效率,即减少算法时间复杂度。估算算法运行时间的基本考虑是:确定问题的“规模”和确定算法执行
“基本操作”的次数。
fr ok 1 ok= 0cc+ ) 0c _( c=; c< 2; k+ c o
2百钱买百鸡问题
公元前五世纪,我国古代数学家张丘建在《经》算一书中提
出了“百鸡问题”鸡翁一值钱五,:鸡母一值钱三,雏三值钱鸡
一
fr e=;e< 3; n+ o( n 1 n= 3 e+ ) h h h
fI h c=; ik 1 0 hc
+ ) o( ik 1 h c< 0; i k+ c c c
i f
。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?这里有要求, (就是
( o k h n c ik= 0 ) 5 cc+木 e+ hc,= 1 0 ( c+ e+ hc= 1 0&&(木 o k 3 h n c ik3= 0 ) c &&( ik= 0 c c%3= ) h )
S t . . i tn t oc ysem out pr n l rt k=” oc c+c k+” t n=”、 he+hen+” t、
1 0钱刚好要用完, 0鸡翁、鸡母和鸡雏都必须要买到 (= )显> 1,
然,小鸡的个数必须是 3的倍数 )。解法 1以下代码全部是用 J v语言编写 ) ( aa:
cas n rd{ ls de 1 Hu p bi s t odm i(t n g[{ u l aiv i anSr g rs) ct c i a]
i c nt co k; i nthe n; i tc c n hi k;
c ik” h c 1 hc=+c i; k
】
1 解法 1的程序运行结果: 解法 2的程序运行结果:
fI o k 1 o k 1 0c c+ ) o( c=; c< 0; k+ c c o
 ̄r e=;e< O;e+ ) ( n l n l 0h n+ h h fI hc=;hc< 0; ik+ 0c l( ik 1 ik 1 0c c+ ) c h
i f
( ok h n c ik= 0 ) 5 o k 3 h n c ik3= 0 ) ( c+ e+ hc= 1 0&&( c cc+ e+ hc/= 1 0 &&c ik: 0) (hc%3= )
S s e o t r n l r c c=” c c+、 h n” h n” t y t m.u . i tn t o k+ o k” t e=+ e+、 p -
c ik” c ik; hc=+ hc )
解法 2比解法 1率要高,以看出,效可解法 2中计算机执行指令次数大约是 2 * 3 1 0 6 0 0次 ( . 0 3 * 0= 6 0 66万次 )。因为问题规模不大,以,所我们在运行上面两个程序时都很快,觉不感
到运行时间的时间差。
) )
这个算法学生容易想到,而重复是计算机的拿手好戏,算法可读性好。那么该算法执行工作量有多大呢?考虑到最耗费时间的是 fr循环,故计算机执行语句次数大约是 o
但是,熟悉算法时间复杂度的读者,就可以看出,实解法其 1和解法 2的时间复杂度是一样的,因为都是 3重循环
,以所复杂度都是 O(s只是因为 n很小,算机有很快的运行速 n),计
【者简介】作陆深焕(90 )男,广宁人,教,方向: 18-,广东助研究计算机软件。
http://doc.xuehai.net