袁海根
摘 要:計算機編程與數學算法有直接的關系,通過數學理論、數學算法構建合適的數學模型,使不同的類能夠轉化為統一的數學模型,不斷優化該數學模型的算法,設計合理的編程邏輯,通過邏輯繼承解決復雜的問題,能夠最大限度優化計算機編程,提高編程效率和程序運行效率。文章研究了數學算法對計算機編程的優化。
關鍵詞:數學算法;計算機編程;優化;數學模型
數學算法是一種以數學模型為基礎的理論知識,能夠對計算機編程中的問題進行歸納總結和統一計算,以提高邏輯應用的效率,它是計算機編程的基礎。計算機編程是從數學模型開始的,首先要根據具體問題進行抽象,以建立一個合理的數學模型,根據此模型設計一個算法,最后進行編程與調試,直至獲得最終的正確解答,通過算法和數據結構組成了一個計算機程序。數學算法是對數學模型的計算,選擇何種算法解決數學模型,直接關系到基于數學模型而建立的程序是否更為高效而準確,數學算法是優化計算機編程的關鍵環節[1]。
1 數學算法的含義
數學算法是一種歸納算法,在嚴格遵循相應數學原則與步驟的基礎上,計算工作量,通過挖掘數學模型的規律,以最小的代價、最少的計算工作量、最快速的方法獲得準確的結果。其根本思想在于研究并總結事物規律,最大限度減少工作量。計算機編程可以利用數學建模的思想,通過數學算法的選擇以達到優化編程的目的,也可以通過數學算法精簡代碼程序來優化編程,提高程序運行效率[2]。
2 數學算法對于計算機編程的優化
2.1 運用數學算法簡化C語言編程
C語言是計算機編程語言的基礎,有廣泛的應用范圍,也是計算機高級編程語言的擴展基礎,重復編譯是C語言編程中的一個多發性問題,由于C語言是一種過程性程序語言,編程時,需要著重考慮代碼邏輯運行過程的問題,但在編譯時,會受自身性質的局限。數學算法能夠對這一邏輯局限進行優化。通過數學算法對代碼進行精簡,達到精簡代碼程度的目的,進而提高過程中的效率。在算法編程前,邏輯分析是首要的工作,分析程序設計流程圖,以體現程序運行的邏輯。如在C語言編程中,設計計算機的閏年程序是一個有代表性的編程工作,閏年包括了兩個判斷標準,即一年有366天或者2月份有29天。在指定一個年份時,要如何直接得知這個年份是否為閏年,就可以通過編譯代碼程序的形式來實現,并且需要運用數學算法來優化這一代碼程序。數學算法中,不能被100整除而能夠被4整除的數字就代表是閏年年份,也可以是100或400的倍數,對閏年的相應數學算法進行歸類,直接編寫為一個程序,以判斷是否為閏年。在C語言編程中,數學算法能夠將編程語言流程簡化,利用數學算法的歸納、抽象思想將流程簡單化,使這種面向過程的語言能夠避免重復編譯,防止時間冗余[3]。
2.2 引入數學模型思想優化面向對象語言的編程
面向對象語言即C++語言,這是一種基于C語言發展而來的編程語言。面向對象程序的設計語言是對對象進行封裝,轉變C語言在面向過程設計時的語言弊端,提高計算機編程效率的一種語言方式。這種語言利用了類模仿,并將封裝原理融入其中,進一步提高了編程效率,類的繼承與對象的封裝都可以通過數學算法優化,以優化編程效率。設計面向對象的程序時,需要定義類、不同類的嵌套、封裝和繼承,當程序涉及繼承處理時,會使編程工作量變得極為龐大。數學算法中建模思想則為精簡工作量提供了有效的途徑,利用數學模型進行統一計算,以解決問題。建立數學模型就能夠將不同的類以統一模型來分類,再利用邏輯繼承完成不同模型之間的程序設計,既優化了編程效率,又提高了程序實效性[4]。
3 數學建模與數學算法在優化高級語言編程時的應用
3.1 數學算法在優化計算機編程時的意義
在編寫一個高級語言程序時,為減少運行消耗的時間,需要考慮幾個問題:數學算法選擇的策略、問題的規模、程序編譯時生成的計算機代碼質量、計算機執行指令時的速度。編譯程序不同、計算機不同,都會影響到程序運行效率,因此,程序效率是無法用絕對時間單位來衡量的。除了程序運行相關的計算機軟硬件等客觀因素外,選擇的算法就成了影響程序運行工作量的最大決定因素,通過優化算法達到減少程序運行時間、提高程序執行效率的目的,是一種適用性更高的方法。因此,數學算法是編程優化的關鍵步驟,為提高程序效率,必須選擇合適的算法。評價一個算法的質量需要考慮到時間復雜性與空間復雜性,一個問題有多種算法,在選擇算法時,首要考慮的是算法效率,基于算法效率再精簡程序,使算法能夠和程序有效結合,找出程序簡單化與算法合理化之間的最大平衡,尋找最優算法,確保程序中的算法能夠滿足實際運算的目的[5]。
3.2 利用數學算法優化計算機編程的實例
如,要解決如下問題:1×2×3×……×n(1 000 首先,可以直接從1到n相乘,每次乘完觀察一次結果數,將結果數后面的0全部去掉,并計下這些被去掉的0的個數,因為只求后面的0的個數,而不必考慮前面的數值,可以把前面和0沒有關系的數字全部省略掉,保留所有有效數字,再相乘n次就能夠得出0的個數。根據這種算法編寫核心代碼即可進行運算,這種算法能夠解決問題,但可以看出,需要運算的次數很多,且這個乘法數列中,有很多數字無法生成0,因此,可以直接不考慮這些數字,而直接考慮會對0的生成個數產生影響的2與5的倍數,可以看出,這種算法并非最優化算法。 其次,根據第一種算法中的分析可以得出,1~9的所有位數中只有包含2×5、4×5、6×5、8×5這幾個算式的能夠生成0,因此,對0的計算個數能夠產生的影響的只有5的倍數,含有2的分解數多于含有5的分解數,為簡化程序,可以直接考慮這個數列中能夠分解出多少個5,就代表能夠產生多少個0,以這種算法編寫程序較第一種算法減少了80%,較前一種算法更為優化,但從這一種算法的分析可以進一步觀察,該數列中包含的5的個數就是相乘后結果末尾0的個數,因此,仍然可以繼續對算法進行優化。
再次,直接求解含5的個數即可求解0的個數,采取層層剝皮法,第一次剝皮以5為步長作一次循環,即可求得含5的個數,這樣就能將數列從5,10,15,……變為1,2,3,4,……。第二次剝皮以52為步長作二次循環,求解含有52的個數,將15,20,75,100,……通過一次剝皮變為5,10,15,20,……,再通過二次剝皮變成1,2,3,4,……。第三次剝皮則以53為步長作二次循環,求解含有53的個數,直至步長≥n時,就可以退出循環,將包含有5的方數的個數相加,就是0的個數。這種算法也就是最優算法,根據該算法編譯核心程序如下:
Long num,i,n;
cout<<”please input n:”< cin>>n; i=n; num=0; while(i>=5) { I=i/5; num+=I; } cout<<”1*2*3*4*…*”< cout<<”the number of 0 is”< < 這3種算法每一次均有一定的優化,第一種方法需要100次外循環求解,而第二種方法則僅需要20次,第一種方法則僅為3次循環,只需要一層循環就能夠求解,充分表明數學算法對于編程優化和程序運行效率的重要性[6]。 3.3 重視數據結構的設計,減少算法的空間復雜度 數學算法效率的提高與數據結構的合理性有重要的作用,能夠提高算法對于變量訪問的效率,降低變量所需存儲空間。如,在稀疏矩陣中,當矩陣中存在過多元素時,就可以通過壓縮矩陣存儲空間來提高算法效率,利用行號、列號和元素三元組存儲矩陣,能夠大量壓縮存儲空間,避免二元組存儲時對于矩陣中零元素的多余存儲,并且能夠在遍歷矩陣時,降低遍歷次數,算法將更為高效。還可以通過變量共享和聯合體等方式,多個變量就能夠共享同一段存儲空間,這樣就大大減少了算法的空間復雜度,依次編譯程度,將會使程序運算更為高效,空間占用更為簡單[7]。 4 結語 計算機的學習離不開數學理論與知識的學習和運用,當編程人員受限于計算機軟硬件等客觀條件限制時,要提高程序運行效率,就可以通過優化數學算法來優化編程,能夠以很小的代價提高程序運行效率。通過數學模型的建立,利用數學算法對編程邏輯進行分析設計,不斷優化數學算法,降低其時間復雜度、空間復雜度,最大限度解決重復編譯的情況,提高編程效率。 [參考文獻] [1]方建衛,何靜.數學算法對計算機編程優化的分析與研究[J].赤峰學院學報,2014(21):84. [2]韓頂軍.數學算法對計算機編程優化的分析與研究[J].電子制作,2014(24):84. [3]魏連秋.數學算法對計算機編程優化的分析與研究[J].科技創新導報,2010(30):3-4. [4]姚玉閣.數學算法對計算機編程優化的研究[J].電子技術與軟件工程,2013(16):208. [5]曾鎮東.數學算法對計算機編程優化的分析與研究[J].電腦知識與技術(學術交流),2016(7X):245-246. [6]歐陽玉峰,周瑩瑩.數學算法對計算機編程優化的研究[J].黑龍江科技信息,2016(6):146. [7]葉文婷.數學算法對計算機編程的優化[J].通訊世界,2015(9):234-235.