廖克順
(南寧職業(yè)技術(shù)學(xué)院,廣西 南寧 5300088)
在設(shè)計(jì)計(jì)算機(jī)算法過程中,不管在解題思路上,還是編寫程序,都離不開數(shù)學(xué)方法的應(yīng)用,數(shù)學(xué)方法在計(jì)算機(jī)算法中得到了廣泛應(yīng)用。
數(shù)學(xué)方法具有3個(gè)基本特點(diǎn):一是高度的抽象性和概括性,數(shù)學(xué)方法的抽象性表現(xiàn)為僅保留事物間數(shù)量的關(guān)系和空間形式;二是精確性,即邏輯的嚴(yán)密性及結(jié)論的確定性;三是應(yīng)用的普遍性和可靠性,不受任何具體內(nèi)容限制。
計(jì)算機(jī)算法中如何實(shí)現(xiàn)n個(gè)數(shù)遞乘變量求和?如果進(jìn)行單項(xiàng)的計(jì)算,明顯過于麻煩。因?yàn)閿?shù)據(jù)呈現(xiàn)出遞乘的規(guī)律,即Tn與Tn-1之間是:Tn=n×Tn-1。從第2個(gè)數(shù)據(jù)開始,后面每一個(gè)數(shù)據(jù)都可以用前一個(gè)數(shù)據(jù)與n相乘得到。在計(jì)算機(jī)程序中,可以設(shè)置簡(jiǎn)單的語句,就可以實(shí)現(xiàn)對(duì)這種遞推關(guān)系數(shù)據(jù)的處理。計(jì)算機(jī)算法利用了遞推、數(shù)列概念,正是對(duì)數(shù)學(xué)方法的有機(jī)整合[1]。
用數(shù)學(xué)歸納法證明對(duì)于任意正整數(shù)n,1+2+3+……+n=n(n+1)/2成立。證明思路是:檢驗(yàn)式子對(duì)n取初值時(shí)成立,假設(shè)對(duì)于正整數(shù)n=k式子也成立,進(jìn)一步證明對(duì)于n=k+1時(shí)也成立。顯然,式子對(duì)于n=1時(shí)是成立的,假定對(duì)于n=k時(shí)式子成立,即1+2+3+……+k=k(k+1)/2,在這個(gè)假設(shè)前提下,證明式子對(duì)于n=k+1也成立,即有1+2+3+……+k+(k+1)=(k+1)(k+2)/2。只要式子對(duì)于n=k+1成立,就證明了式子對(duì)于所有的正整數(shù)都成立[2]。這一證明過程可以通過如下程序段來實(shí)現(xiàn)://自然數(shù)列前項(xiàng)求和公式
public static long s(int n)
{
If (n≡≡1)
return 1;
Else
returns(n-1)+n
}
由此看出,函數(shù)s是在調(diào)用自身的副本實(shí)現(xiàn)求和的計(jì)算,這就是數(shù)學(xué)方法中的遞歸思想。通過以上例子,我們可以看出,計(jì)算機(jī)算法中,廣泛地運(yùn)用了數(shù)學(xué)方法。
計(jì)算機(jī)擅長(zhǎng)機(jī)械重復(fù)地處理數(shù)據(jù),表現(xiàn)出循環(huán)思想,如果不對(duì)數(shù)據(jù)進(jìn)行循環(huán)處理,計(jì)算機(jī)就沒有什么現(xiàn)實(shí)作用。數(shù)學(xué)方法中的數(shù)列求和、輾轉(zhuǎn)相除法,判定素?cái)?shù)、二分法、秦九韶算法等,在計(jì)算機(jī)程序中得到應(yīng)用。例如:使用輾轉(zhuǎn)相除法求兩個(gè)正整數(shù)m、n的最大公約數(shù)和最小公倍數(shù)。
代碼如下:include<stdio.h>
int main(intargc,int*argv[])
{
int num1,num2,temp;
printf("please input 2 number:");
scanf("%d,%d",&num1,&num2);
if(num1<num2)//the result is num1>num2
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;
b=num2;
while(b)
{
temp=a%b;
a=b;
b=temp;
}
printf("thezuidagongyuehsu:%d,thezuixiaogongbeishu:%d ",a,num1*num2/a);
system("pause");
return0;
}
計(jì)算機(jī)編程通過編譯不同的計(jì)算機(jī)語言而達(dá)到不同的實(shí)際操作的目的。以C語言為例,C語言在進(jìn)行編程的過程中遇到最多的問題就是重復(fù)編譯,在編寫程序時(shí)C語言比較重視代碼邏輯運(yùn)行的過程,所以C語言在程序語言方面受到自身語言的局限性比較大。因而,在實(shí)際的編寫程序過程中要充分發(fā)揮數(shù)學(xué)算法對(duì)計(jì)算機(jī)編程的優(yōu)化作用。在編寫程序時(shí)融入數(shù)學(xué)算法的思想,在C語言進(jìn)行編寫程序時(shí),通過不斷地簡(jiǎn)化編寫語言的流程,使計(jì)算機(jī)編程得到優(yōu)化。
進(jìn)行程序設(shè)計(jì)時(shí),計(jì)算機(jī)專家必須要使用眾多數(shù)學(xué)方法。只有以科學(xué)的數(shù)學(xué)方法做基礎(chǔ),才能尋找出數(shù)據(jù)的共性,設(shè)計(jì)出的計(jì)算機(jī)程序在運(yùn)行上節(jié)省時(shí)間、占用較少空間。下面我們分析一個(gè)定積分計(jì)算案例。計(jì)算定積分:In=1/e∫01xnexdx i=0,1,2,L,7
解:遞推公式:In=1-nIn-1先計(jì)算I0,再計(jì)算I1,I2,…,I7
假設(shè)計(jì)算出的近似值為I0*,誤差為E(I0*)=δ
則I1的近似值I1*的誤差為E(I1*)=δ
則I2的近似值I2*的誤差為E(I2*)=2!δ
則I3的近似值I3*的誤差為E(I3*)=3!δ… …
則I7的近似值I7*的誤差為E(I7*)=7!δ=5040δ誤差放大5 000倍!遞推公式計(jì)算:In-1=(1-In)/n先計(jì)算I7,I0的誤差只有I7的誤差的五千分之一!
通過上面兩種計(jì)算,我們看到,數(shù)據(jù)計(jì)算順序不同,計(jì)算出的結(jié)果卻相差遙遠(yuǎn)。就是因?yàn)檗D(zhuǎn)變一下計(jì)算的次序,就解決了類似數(shù)據(jù)計(jì)算穩(wěn)定的難題,制造出一套更好的計(jì)算方法。
計(jì)算結(jié)果的穩(wěn)定性,就是對(duì)原始數(shù)據(jù)的微小變動(dòng),沒有令數(shù)據(jù)失真,可以提高算法穩(wěn)定性,完善計(jì)算機(jī)算法的程序設(shè)計(jì),這就是數(shù)學(xué)方法對(duì)計(jì)算機(jī)算法優(yōu)化。
設(shè)計(jì)出的每一個(gè)算法,都需要進(jìn)行算法分析。堅(jiān)持一定的計(jì)算理念,討論計(jì)算機(jī)算法時(shí)間、空間的復(fù)雜度,分析計(jì)算機(jī)算法具體應(yīng)用在哪類問題,或者根據(jù)某類問題選擇對(duì)應(yīng)的計(jì)算機(jī)算法。
試驗(yàn)分析就是將兩個(gè)計(jì)算機(jī)算法進(jìn)行綜合比較。數(shù)學(xué)方法可以細(xì)致地對(duì)算法進(jìn)行分析,利用嚴(yán)密邏輯推理判斷算法的優(yōu)劣。但是在實(shí)施實(shí)際項(xiàng)目時(shí),通常情況下,是不能進(jìn)行有效論證和科學(xué)數(shù)據(jù)推斷。專家們?cè)谠O(shè)計(jì)計(jì)算機(jī)算法程序中,為了展示計(jì)算機(jī)算法某個(gè)性能的指標(biāo),就會(huì)配置一個(gè)能近似性表達(dá)性能的方法。怎樣實(shí)現(xiàn)在處理同類數(shù)據(jù)時(shí),運(yùn)行時(shí)間縮短、復(fù)雜度簡(jiǎn)化是計(jì)算機(jī)算法性能的重要分析依據(jù)。
數(shù)學(xué)方法在計(jì)算機(jī)算法中的應(yīng)用,無疑帶給計(jì)算機(jī)算法思想、設(shè)計(jì)、分析等多個(gè)環(huán)節(jié)的幫助和優(yōu)化,同時(shí)也增強(qiáng)了計(jì)算機(jī)算法的嚴(yán)密性、可靠性?,F(xiàn)在計(jì)算機(jī)技術(shù)不斷朝著智能方向發(fā)展,但是我們?nèi)詰?yīng)該堅(jiān)持計(jì)算機(jī)算法與數(shù)學(xué)算法整合的思路,謀求計(jì)算機(jī)技術(shù)的進(jìn)步。
[1]崔守梅,郝玲.計(jì)算機(jī)算法中的數(shù)學(xué)方法研究[J].淄博師專學(xué)報(bào),2006(2):11-14.
[2]張鄰.淺談?dòng)?jì)算機(jī)算法中的數(shù)學(xué)方法研究[J].網(wǎng)絡(luò)技術(shù)安全與應(yīng)用,2014(12):45-47.