什么是“算法”
算法,一看字面就知道,肯定是“計算方法”的簡稱啦,特指“計算機的計算方法”,所以,算法是由電腦程序來實現(xiàn)的。
算法,英文叫Algorithm,就是為了讓電腦解決一個問題而設計出來的一套計算方法,這套計算方法的設計是依靠“數(shù)學模型”的建立。
也就是說,程序員在設計算法之前,會將實際問題理解分析,歸納為一個“具體的數(shù)學問題”。
算法是解決問題的計算方法
算法有這么幾個特征
1確定
算法的每一個步驟都有“明確的意義”,對于算法結(jié)果的預期也是明確的。
2有窮
算法不能一直算,停不下來是不行的;要有一個明確的結(jié)束條件,要不然算到“天荒地老”還有什么意義呢?
3可行
有個笑話說一個人面試會計師,算數(shù)特別快瞬間出結(jié)果,但是就是算得不對。
4輸入輸出
算法就是用來解決問題的,問題的來源就是輸入,問題的結(jié)果就是輸出。
再復雜的算法也是由一個個小算法組合成的
怎么設計一個算法程序呢
算法有三個要素——
數(shù)學模型,輸入輸出方法,算法步驟。
所以說,怎么設計一個算法呢?
首先,先對要解決的問題建立一個數(shù)學模型,把原問題化為數(shù)學問題;
然后,將問題的“已知條件”化為“數(shù)據(jù)”輸入到數(shù)學模型中;
再然后,通過對輸入一步一步的轉(zhuǎn)化/處理/計算,得到結(jié)果;
最后,把結(jié)果按照希望的形式,輸出出來。
數(shù)據(jù)結(jié)構(gòu)對算法設計至關(guān)重要
數(shù)據(jù)結(jié)構(gòu)有兩層含義——
1代表了儲存數(shù)據(jù)的集合
一系列的數(shù)據(jù)能夠儲存在這個數(shù)據(jù)結(jié)構(gòu)中。
2代表了儲存的數(shù)據(jù)之間有特定的關(guān)系
這正是“結(jié)構(gòu)”一詞的意義,學過線性代數(shù)的同學一定很清楚,結(jié)構(gòu)的力量很強大,能讓信息量成倍地擴大。
數(shù)據(jù)——重要的信息價值所在
數(shù)據(jù)結(jié)構(gòu)的選擇會極大地影響算法設計
合適的數(shù)據(jù)結(jié)構(gòu)能讓算法設計時更高效更簡潔,而不合適的數(shù)據(jù)結(jié)構(gòu)有時候會把算法設計帶入深淵,甚至無法實現(xiàn)算法。
有些初學編程的朋友在處理一些算法問題時,難免會遇到一些“感覺很繁瑣,但又想不出什么簡單的方法”的情況,這時不妨回來看看數(shù)據(jù)結(jié)構(gòu),換一個更適合的數(shù)據(jù)結(jié)構(gòu),常常會有柳暗花明之感呢。
數(shù)據(jù)結(jié)構(gòu)是編程的基礎中的基礎
初階數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)共8種,有4種最常用也最簡單,它們是:
數(shù)組(Array)
鏈表(Linkedlist)
堆棧(Stack)
隊列(Queue)
由于它們的結(jié)構(gòu)都是線性的,它們還有一個共同的名字——
“線性表”。