標籤:
演算法的基本概念
以下只是個人學習的筆記,由於我也是剛接觸,所以有可能有錯誤,如有錯誤,請指出
演算法:是解決一個問題的完整的步驟描述,是解決問題的策略、規則、方法。
1.演算法的特徵:有窮性、確定性、可行性、輸入、輸出
(1).有窮性:一個演算法必須在執行有窮步之後結束並且在每一步都在有窮時間內完成,不能無限的 執行下去。 演算法不能出現死迴圈,如計算一個累加的程式,必須要指定一個最終要加的值,如果不指定,那麼這個程式將會死迴圈,如計算1+2+3+···+99+100,如果沒有指定最終的值100,那麼他就是一個死迴圈
(2).確定性:一個演算法裡面的每條語句,必須都是確定的,不能存在二義性,也就是說,語句不能 出現兩種效果或者兩種意思
(3).可行性:演算法裡面的語句必須都是可執行檔,比如y=0,z=x/y,這裡就是不可行的,因為分母不能為0
(4).輸入:一個演算法裡麵包含多個或者0個輸入,輸入語句用scanf表示,如 多個輸入:int a,b,c scanf("%d,%d,%d,"&a,&b,&c); 0個輸入:main{ printf("abc"); }
(5).輸出:演算法內必須要有輸出,用printf表示,如果程式沒有輸出,那麼這個程式將沒有意義
2.演算法的優劣:正確性、可讀性、健壯性、時間複雜度與空間複雜度
(1).正確性:一個演算法必須要滿足具體問題的要求,當輸入合法的輸入演算法必須能正確的輸出結果
(2).可讀性:為了方便閱讀和修改,一個演算法不能寫的過於複雜,如果演算法寫的非常複雜,不利於自己或者別人修改和閱讀
(3).健壯性:這裡的健壯性指的是,當使用者輸入一個非法的資料,程式應當給予提醒,比如z=x/y,要求使用者輸入x和y,使用者輸入x為1,y為0,分母不能為0,在這裡,當使用者輸入為0時,最好給使用者提醒,y不能等於0
(4).時間複雜度與空間複雜度:一個程式運行時,都會需要相應的已耗用時間,如果是小一點的程式,已耗用時間不會感覺到慢,但是大一點的程式,如果已耗用時間就會很重要了,就比如QQ,如果每次開啟QQ都需要好幾個小時,那這樣會影響使用者的使用。空間複雜度指開啟改程式需要的儲存空間,但是以電腦的發展,電腦的配置越來越高,這個已經不太重要了
演算法的描述
1.演算法:演算法設計、演算法分析
演算法設計:主要研究怎樣針對某一特定類型的問題設計出求解步驟 演算法分析:主要討論所涉及的演算法步驟的正確性和複雜性
2.演算法描述:對於一些問題的求解步驟,需要一種表達方式,即為演算法描述
演算法描述可分為自然語言、流程圖、N-S流程圖等
(1).自然語言:就是普通語言表達這個演算法的步驟,自然語言比較通俗易懂,但是容易產生歧義,如果描述比較複雜的演算法不是很方便,所以一般很少用自然語言來描述演算法
(2).流程圖:是一種傳統的演算法表示方式,用一些圖框來表示演算法的不同操作,用流程線來表示演算法的執行方向,看起來比較直觀,並且易於理解
(3).N-S流程圖:和上面說的流程圖一樣,只不過取掉了流程線,將流程圖畫在一個矩形框裡
演算法的結構
演算法的結構:順序結構、迴圈結構、選擇結構(分支結構)
(1).順序結構:是簡單的線性結構,各操作是按照它們出現的先後順序執行的
(2).選擇結構(分支結構):必須包含一個判斷框,然後根據判斷框進行下一步的操作
(3).迴圈結構:反覆的執行一系列 操作,知道條件不成立的時候才終止迴圈 迴圈結構可分為當型迴圈結構、直到型迴圈結構 當型迴圈結構:先判斷條件,在執行語句。當條件成立時,進行下一步操作 直到迴圈結構:先執行語句,在判斷條件。執行語句,直到條件成立後在進行下一步操作
C語言基礎--演算法