四个经典的算法案例
龙源期刊网 https://www.360docs.net/doc/695852728.html,
四个经典的算法案例
作者:郑小瑛
来源:《读写算》2012年第21期
案例1:辗转相除法,又名欧几里德算法,它是用来求两个正整数最大公因数的一种方法。
例:用辗转相除法求8251与6105的最大公约数
∵ 8251÷6105=1 余 2146 6105÷2146=2 余 1813 2146÷1813=1 余 333 1813÷ 333=5 余 148 333 ÷ 148=2 余 37 148 ÷ 37=4 ∴ 37是8251与6105的最大公约数。
程序框图如下:其中 r = mod(a, b) r表示a÷b的余数
案例2:秦九韶算法,它是中国南宋时期数学家秦九韶提出的,用来解决多项式的求值问题,在西方被称作霍纳算法。
首先看一道例题:求多项式f(x)=2x5―5x4―4x3+3x2―6x+7当x=5时的值。
根据秦九韶算法:f(x)可表示为f(x)=({[(2x―5)x―4]x+3}x―6)x+7
于是令 V0=5 则V1=2V0―5=2×5―5=5 V2=V1X―4=5×5―4=21 V3=V2X+3=21×5+3=108 V4=V3X―6=108×5―6=534 V5=V4X+7=534×5+7=2677 ∴ f(5) = 2677
秦九韶算法只用到乘法、加法两个简单运算,不需要乘方运算,它是多项式求值的简化算法。
下面看程序框图,其中a0、a1、a2、a3、a4、a5是f (x) 从右向左的系数。
案例3:排序:是一种基本并且常用的算法,排序的算法很多,可以参阅课本,这里不再叙述。
案例4:进位制
例:画程序框图,表示把k进制数a(共有n位),转化为十进制数b的过程
框图如下:
其中:t = GET a│i│ t表示a右数第i位
利用上面的算法,把2进制数110011化为十进制的数