石玉杰 安徽機(jī)電技師學(xué)院
在信息技術(shù)高速發(fā)展的今天,大數(shù)據(jù)、人工智能、云計算等一系列信息技術(shù)給我們的生活帶來了深刻的改變。而這些,其實都離不開計算機(jī)的程序設(shè)計。在程序設(shè)計中,數(shù)據(jù)結(jié)構(gòu)和算法構(gòu)成了程序本身,其中算法優(yōu)化則直接決定了程序執(zhí)行的效率。數(shù)學(xué)算法能夠起到很好的程序優(yōu)化的作用,這點對于計算機(jī)的編程而言尤為重要。在本文中,通過探究與分析對數(shù)學(xué)算法在計算機(jī)編程中的應(yīng)用進(jìn)行了解讀。
(一)數(shù)學(xué)算法
我們即使不是專業(yè)人員,也非常清楚數(shù)學(xué)算法是一種數(shù)學(xué)研究的科學(xué)的方法,就其概念而言,是指對發(fā)現(xiàn)的事物中的數(shù)學(xué)問題進(jìn)行研究,利用歸納性的算法進(jìn)行總結(jié)。數(shù)學(xué)算法是一種可以有效減少工作量的方法,不僅如此,還能夠找到最優(yōu)化的方法來提高工作效率,更高效地解決問題。可見,數(shù)學(xué)算法對于計算機(jī)編程而言,具有重要的幫助作用,比如我們在程序設(shè)計語言C語言中的應(yīng)用就比較廣泛,這一點在計算機(jī)編程人員中,往往會被忽略。
(二)計算機(jī)編程
說到計算機(jī)編程,這個概念在當(dāng)今時代已經(jīng)不再陌生,雖然不能從學(xué)理上進(jìn)行定義,但是人們也都能夠大體知道計算機(jī)編程的概念。所謂的計算機(jī)編程,就是在計算機(jī)上編輯一段程序,并讓計算機(jī)執(zhí)行程序指令的過程。到目前,計算機(jī)編程的從業(yè)人員越來越多,對計算機(jī)編程的優(yōu)化也越來越注重。計算機(jī)編程優(yōu)化離不開數(shù)學(xué)算法,因為數(shù)學(xué)算法是高校的技術(shù)方法,由此,不斷優(yōu)化計算機(jī)編程中的數(shù)學(xué)算法,就成為了提高編程效率,優(yōu)化編程結(jié)果的充分條件。
在科技飛速發(fā)展的時代,計算機(jī)軟件開發(fā)要想取得可持續(xù)發(fā)展,就必須能夠解決復(fù)雜的數(shù)學(xué)運(yùn)算,并且能夠解決復(fù)雜的編程問題,而使用起來又需要簡單化的操作,運(yùn)用簡單的程序運(yùn)行。這一切都需要數(shù)學(xué)算法的技術(shù)支撐。數(shù)學(xué)算法最基本的就是數(shù)學(xué)建模,通過數(shù)學(xué)建模可以將生活中的抽象問題進(jìn)行簡單化的處理,可以降低難度,從而提高效率。基于數(shù)學(xué)模型的計算機(jī)編程優(yōu)化,關(guān)鍵的就是數(shù)學(xué)算法的掌握程度。而計算機(jī)編程的軟件更新速度又很快,因此其復(fù)雜程度也在不斷提高,這對于編程人員來說,就成為了加重負(fù)擔(dān)的事情。因為編程人員需要對其進(jìn)行系統(tǒng)化的優(yōu)化。
要想進(jìn)行計算機(jī)編程,首先要建立一個數(shù)學(xué)算法模型。這個模型一定要科學(xué)、合理、貼合程序,將數(shù)學(xué)算法和計算機(jī)程序進(jìn)行結(jié)合,這樣才能保證計算機(jī)編程的有效、高速的完成。計算機(jī)編程中,數(shù)學(xué)算法的優(yōu)化對有效資料的搜集和整理有很大作用。通過數(shù)學(xué)算法模型的建立,可以將問題描述的更加直觀和形象,這樣才能找到解決問題的關(guān)鍵。同時,計算機(jī)編程中的數(shù)量關(guān)系需要與數(shù)學(xué)算法進(jìn)行對應(yīng),這樣有利于提高數(shù)學(xué)算法優(yōu)化的精準(zhǔn)性;數(shù)學(xué)算法的優(yōu)化,也能提高計算機(jī)軟件中程序的執(zhí)行力、運(yùn)行速率等一系列功能效率,能夠保證計算機(jī)編程順利進(jìn)展。
要想對計算機(jī)編程中的數(shù)學(xué)算法進(jìn)行優(yōu)化,就要對其中的數(shù)據(jù)結(jié)進(jìn)行合理的設(shè)計。如果想達(dá)到編程優(yōu)化的效果,數(shù)據(jù)結(jié)的設(shè)計是必不可少的,因為它可以將變量的位置改變。優(yōu)化數(shù)算學(xué)法,就是要減少變量的運(yùn)行空間,這樣才能達(dá)到計算機(jī)編程優(yōu)化的目的。比如,稀疏矩陣,它的元素很多,矩陣空間要進(jìn)行壓縮,如果對其直接壓縮,會浪費(fèi)二維數(shù)組,那么要想對矩陣壓縮,就需要利用三元組進(jìn)行壓縮,進(jìn)而達(dá)到對算法空間復(fù)雜性的降低的效果。
通過具體的案例介紹和分析,可以將數(shù)學(xué)算法優(yōu)化進(jìn)行描述,進(jìn)而明確計算機(jī)編程數(shù)學(xué)算法優(yōu)化的具體策略。具體案例為:準(zhǔn)確計算“1x2x34x5……xN”的基礎(chǔ)上,明確計算結(jié)果末尾數(shù)有幾個0。其中的N值取值范圍在1000~10000之間,注意N不能等于1000,N也不能等于10000。我們分析這個算法過程,實際上屬于對案例中未知數(shù)n的具體分解,即“bx10x”,其中的“b”屬于正整數(shù),沒有被10整除。
1.第一種數(shù)學(xué)計算方法——對計算結(jié)果的優(yōu)化
對計算結(jié)果有效數(shù)進(jìn)行客觀的分析,并且計算結(jié)果,明確計算結(jié)果中含有多少個0。利用C++語言進(jìn)行編程,根據(jù)數(shù)學(xué)算法的模型進(jìn)行合理的代碼編寫,開展數(shù)學(xué)算法優(yōu)化的分析。這種算法和計算機(jī)編程屬于傳統(tǒng)數(shù)學(xué)算法,有著一定的缺點,那就是計算量大,計算復(fù)雜,對2和5的倍數(shù)要進(jìn)行分析,因為要保證結(jié)果中不會出現(xiàn)關(guān)于0的數(shù)字,所以這種算法的計算準(zhǔn)確率不會很高。
實現(xiàn)計算結(jié)果的優(yōu)化的程序可見下圖1:
從以上的c++程序中可以明顯看到算法的變化帶來的程序執(zhí)行效率的提升和程序的優(yōu)化,利用mul=mul mod 10000,這段程序以較高的效率派出了超過10000的“大數(shù)”造成的while(mul mod==0)這一循環(huán)的更多次的循環(huán)執(zhí)行,減少了程序循環(huán)的執(zhí)行就在很大程度上提升了程序執(zhí)行的時間,實現(xiàn)了效率上的提升以及資源的優(yōu)化。
2.第二種計算方法——計算過程的優(yōu)化
還有一些編程人員,為了實現(xiàn)算法的優(yōu)化會在計算的過程中使用計算過程優(yōu)化的形式讓自己的程序效率提高,比如對“2x5”、“8x5”等這樣一些規(guī)律的數(shù)據(jù)和算法進(jìn)行把握的時候。這些數(shù)字相互作用可以生成要求的結(jié)果數(shù)字0,因為0也屬于數(shù)字5的倍數(shù)。但是實際計算過程我們發(fā)現(xiàn),2的分解數(shù)要比5的分解數(shù)要多,所以只要能夠計算出分解數(shù)含有5的個數(shù),就能夠知道n的分解數(shù)末尾有幾個0。可以說,第二種數(shù)學(xué)算法可以簡化計算過程,計算的結(jié)果也能更加準(zhǔn)確一些,效果要比第一種算法好。這種算法為計算機(jī)編程提供了有效的計算模型。相應(yīng)地,下面便是在該數(shù)學(xué)計算方法作用下,計算機(jī)編程優(yōu)化分析具體解決方法。
3.第三種數(shù)學(xué)計算方法——層層剝皮的算法優(yōu)化
這種方法主要是利用案例中給出算式包含5的結(jié)果的個數(shù),通過計算5的個數(shù),就能夠準(zhǔn)確計算n的末尾的0的具體個數(shù)。編程人員會相應(yīng)地設(shè)置計算循環(huán)長度,也就是5,在實際的過程中,通過層層剝皮的方式,可以計算出包含5的個數(shù),如5,10,15,……等一系列的規(guī)律性的數(shù)字,再將這些規(guī)律性的數(shù)字組合進(jìn)行剝皮處理,就可以得到剝皮之后的結(jié)果,1,2,3,……等等。這里編程人員設(shè)置的步長要科學(xué)、合理,通過52步長進(jìn)行計算、剝皮,就可以對25,50,75等數(shù)字進(jìn)行處理,得到剝皮結(jié)果是5,10,15等,以此類推,就可以得出步長為n的剝皮結(jié)果了。相應(yīng)地,下面便是循環(huán)作用下包含5的個次方數(shù)數(shù)目總和,如下所示。
總而言之,在計算機(jī)編程方面,數(shù)學(xué)算法優(yōu)化的重要性不言而喻,這種算法的優(yōu)化很好的提升了程序的執(zhí)行效率,提高了資源和空間的開銷。在程序開發(fā)中,小的輕量級的程序在算法的優(yōu)化方面體現(xiàn)出的優(yōu)勢還不是十分的明顯,在一些稍大一些項目中,養(yǎng)成算法優(yōu)化的習(xí)慣對于提高程序的效率的作用是不言而喻的。因此在實際應(yīng)用中,相關(guān)人員要根據(jù)計算機(jī)編程要求、任務(wù)等,科學(xué)選擇數(shù)學(xué)算法,注重其優(yōu)化完善,科學(xué)處理計算機(jī)編程中的數(shù)學(xué)問題,提高計算機(jī)編程質(zhì)量。