1700414865
1700414866
2x+4y=32
1700414867
1700414868
因为鸡和兔子的只数应该都在0-10范围内,所以就试着把0-10中每个数依次代入x和y,只要能够找到使这两个方程同时成立的数值也就求出了答案。利用计算机的处理速度,答案一瞬间就出来了(如代码清单5.3和图5.5所示)
1700414869
1700414870
代码清单5.3 求解鸡兔同笼问题的程序
1700414871
1700414872
For x=0 To 10
1700414873
1700414874
For y=0 To 10
1700414875
1700414876
a=x+y
1700414877
1700414878
b=2*x+4*y
1700414879
1700414880
If(a=10) And (b=32) Then
1700414881
1700414882
MsgBox”鸡=”&CStr(x)&”兔子=,”&CStr(y)
1700414883
1700414884
End If
1700414885
1700414886
Next
1700414887
1700414888
Next
1700414889
1700414890
图5.5 代码清单5.2的执行结果
1700414891
1700414892
1700414893
1700414894
1700414895
1700414896
1700414897
1700414899
计算机是怎样跑起来的 5.6 要点5:使用编程技巧提升程序执行速度
1700414900
1700414901
解决一个问题的算法未尽只有一种。在考量用于解决同一个问题的多种算法的优劣时,可以认为转化为程序后,执行时间较短的算法更为优秀。虽然计算机的处理速度很惊人,但当处理的数据数值巨大或数量繁多时还是要花费大量的时间的。例如,判定91是否是素数的过程一下就有结果了,可是要判定999999937的话,笔者的计算机要花费大约55分钟了
1700414902
1700414903
有时稍微在算法中加入一些技巧,就能大幅度地缩短处理时间。在判定素数上,原先的过程是用待判定的数除以比较它小的所有正整数,只要加入一些技巧,改成用待判定的数除以比较它的1/2小的所有数,处理时间就会缩短。之所以改成这样是因为没有必要去除以比较它的1/2还大的数(要是从2开始依次除下去,只需要从2除到待判定数的平方根就足够了)。通过这点改进,除法运算的处理时间就能够缩短1/2
1700414904
1700414905
在算法技巧中有个著名的技巧叫作“哨兵”,这个技巧多用在线性搜索(从若干个数据中查找目标数据)等算法中。线性搜索的基本过程是将若干个数据从头到尾,依次逐个对比,直到找到目标数据。
1700414906
1700414907
下面还是通过例题来思考吧。假设有100个箱子,里面分别装有一个写有任意数字的纸条,箱子上面标有1-100的序号,现在要从这100 个箱子中找出是否有箱子装有写着要找数字的纸条
1700414908
1700414909
首先看看不使用哨兵的方法。从第一个箱子开始依次检查每个箱子中的纸条。每检查完一个纸条,还要再检查箱子的编号(用变量N表示),并进一步确认编号是否已超过最后一个编号了。这个过程用流程图表示如图5.6所示
1700414910
1700414911
图5.6 未使用哨兵的流程图
1700414912
1700414913
1700414914
[
上一页 ]
[ :1.700414865e+09 ]
[
下一页 ]