當前位置:首頁 > 安卓源碼 > 技術博客 >

編程:你知道數學在編程中有多重要嗎

時間:2019-10-18 00:56 來源:互聯網 作者:源碼搜藏 瀏覽: 收藏 挑錯 推薦 打印

俗話說:學好數理化,走遍天下都不怕,可見數學的地位有多重要。 數學是計算機的鼻祖, 計算機學科就是一門脫胎于數學學科的學科,在計算機專業中也普遍采用了數學的基本概念、基本思想以及相應的數學基本方法。數學理論是計算機的基礎,而學習學計算機專業,

編程:你知道數學在編程中有多重要嗎

 

俗話說:學好數理化,走遍天下都不怕,可見數學的地位有多重要。

數學是計算機的鼻祖, 計算機學科就是一門脫胎于數學學科的學科,在計算機專業中也普遍采用了數學的基本概念、基本思想以及相應的數學基本方法。數學理論是計算機的基礎,而學習學計算機專業,編程又是必須學習的,而編程思想卻又是數學思想在計算機應用中的最直接的體現。

在商業的開發環境,比如做游戲開發,就需要數學基礎很深的人工智能了。很多公司也會找那些數學系的來做開發,對他們來說,由于他們的數學概念模型已經建立了起來了所以他們在計算機方面也會很快就上手,并且很不會比計算機專業的學生差。

隨著計算機技術的快速發展,數學知識在計算機技術發展中,尤其是在計算機應用程序設計中處于極其重要的地位。同時,用數學思維解決各種程序設計方面的難題也是一個十分重要的步驟。在程序設計當中所解決的相當一部分問題都會涉及到各種各樣的科學計算,這需要程序員將實際問題轉換為程序,要經過對問題抽象的過程,建立起完善的數學模型,才能設計出好的軟件。

數學在編程中的體驗不光是算法過程的書寫,還有邏輯思維方面的能力。而軟件編程的思維定式決定了一個人編程的水平,在編程過程中,數學思維清晰,編寫出來的程序讓人耳目一新。結合教學,通過 調查分析,了解到超過85%的學生,他們在編程時是根據語法而編寫程序,完全脫離了軟件編程的思維,這種思維定式使得他們編 寫的程序相當糟糕,沒有一點邏輯。所以數學思維不夠,在軟件 編程會有很多的疑慮,顯的有點縮手縮尾,而且寫的程序也不夠健全,缺乏邏輯。

總結數學在計算機中的應用:

一、邏輯學在學科中的應用從早期的數理邏輯發展到今天 的程序設計模型論。

二、數學在學科中的應用從早期的抽象代數發展 到今天的圖形學、工程問題方面

三、幾何學的應用從早期的二維平 面計算機繪圖發展到今天的三維動畫軟件系統,并在與復分析的 結合中產生了分形理論與技術。

四、游戲、圖形軟件開發中引用了 線性代數中大量的坐標變換,矩陣運算。

五、在數據壓縮與還原、信 息安全方面引入了小波理論、代數編碼理論等。

六、圖像/聲音圖像壓縮算法/人工智能/CAD等領域廣泛使用微積分作理論研究工具

下面我將從一下的三個例子來分析數學在編程中的具體的應用。

編程:你知道數學在編程中有多重要嗎

 

典型實例一:Hannoi塔問題

Hanoi塔由n個大小不同的圓盤和三根木柱a,b,c組成。開始時,這n個圓盤由大到小依次套在a柱上,要求把a柱上n個圓盤按下述規則移到c柱上:

(1) 一次只能移一個圓盤;

(2) 圓盤只能在三個柱上存放;

(3) 在移動過程中,不允許大盤壓小盤。

問將這n個盤子從a柱移到c柱上,總計需要移動多少個盤次?

解:設hn為n個盤子從a柱移到c柱所需移動的盤次。顯然,

(1)當n=1時,只需把a柱上的盤子直接移動到c柱就可以了,故h1=1。

(2)當n=2時,先將a柱上面的小盤子移動到b柱上去;然后將大盤子從a柱移到c柱;最后,將b柱上的小盤子移到c柱上,共計3個盤次,故h2=3。

(3)以此類推,當a柱上有n(n>=2)個盤子時,總是先借助c柱把上面的n-1個盤移動到b柱上,然后把a柱最下面的盤子移動到c柱上;再借助a柱把b柱上的n-1個盤子移動到c柱上;總共移動h(n-1)+1+h(n-1)個盤次。

所以:hn=2h(n-1)+1 (邊界條件:h1=1)

這個問題其實只是數學題目的簡單變形。下面再來看一個應用更加靈活的例子:

典型實例二:

方格取數在一個n*m的方格中,m為奇數,放置有n*m個數,方格中間的下方有一人,此人可按照正前方相臨的五個方向(方格)前進但不能越出方格。人每走過一個方格必須取此方格中的數。要求找到一條從底到頂的路徑,使其數相加之和為最大。輸出和的最大值。

解:這題在本質上類似于遞推,是從一個點可以到達的點計算可以到達一個點的所有可能點,然后從中發掘它們的關系。

我們用坐標(x,y)唯一確定一個點,其中(m,n)表示圖的右上角,而人的出發點是([m/2],0),受人前進方向的限制,能直接到達點(x,y)的點只有(x+2,y-1),(x+1,y-1),(x,y-1),(x-1,y-1),(x-2,y-1)。到達(x,y)的路徑中和最大的路徑必然要從到x+2,y-1),(x+1,y-1),(x,y-1),(x-1,y-1),(x-2,y-1)的幾條路徑中產生,既然要求最優方案,當然要挑一條和最大的路徑,

(2)關系式如下:

F(x,y)=Max{F(x+2,y-1),F(x+1,y-1),F(x,y-1),F(x-1,y-1),F(x-2,y-1)}+Num(x,y)其中Num(x,y)表示(x,y)點上的數字。

邊界條件為:F([m/2],0)=0,F(x,0)=-0(1<=x<=m且x<>[m/2])。

這種問題,涉及到最值,采用的遞推手法被稱為"動態規劃"。簡稱DP。

典型實例三:

從3個紅球,5個白球,6個黑球中任意取出8個球,且其中必須有白球,輸出所有可能的方案。

程序:

#include "stdio.h"

void main()

{ int i,j,k; //I代表紅球,j代表白球,k代表黑球

printf("\n red write black\n");

for(i=0;i<=3;i++)

for(j=1;j<=5;j++) //j=1是因為題目中要求必 須要有白球

{

k=8-i-j; //黑球的個數

if(k>=0&&k<=6)

{

printf("%3d,%3d,%3d",i,j,k); //輸出組成方案

}

}

}

從上面的例子中我們可以看到數學思維在編程中的體驗。

程序設計中可采用多種數學方法,恰如其分的數學方法可以大大減少程序運行的時間和所需空間,起到優化程序的作用。遇到一道題目時,如進制運算,多項式運算等,應不急于馬上用遞歸,回溯等搜索算法,特別是測試數據的范圍很大的時候。不妨先用筆算,從中發現一些規律.但是也不是每一道題都可以用數學方法完成,數學方法只能用于一些求總數,最值之類的題目上。

數學方法的合理運用,可以給編程帶來很大方便,現在一些軟件的編寫,越來越多的用到數學推導歸納。要在如此眾多的程序編寫員里面取得優異成績,堅實的數學基礎和能力是很重要的。

程序設計解決問題都是實際應用問題,涉及各種各樣的科學 計算,而實際問題轉換為程序,要經過一個對問題抽象的過程, 建立起完善的數學模型,才能設計一個問題解決的程序。這需要程序員具有良好的數學基礎。軟件編程的思想最重要是算法,而算法是建立在數學思維上的,其實說白了,程序只是一件衣服,算法才是它的靈魂,算法就來自于數學,沒有深厚的數學思維功底,是弄不懂算法的。

編程:你知道數學在編程中有多重要嗎 轉載http://www.7937001.live/appboke/44080.html

技術博客閱讀排行

最新文章

彩票777苹果