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