算法的五個重要特征:1、輸入:一個算法有零個或多個輸入,以刻畫運算對象的初始情況。例如,在歐幾里得算法中,有兩個輸入,即m和n。2、確定性:算法的每一個步驟必須要確切地定義。即算
算法的五個重要特征:
1、輸入:一個算法有零個或多個輸入,以刻畫運算對象的初始情況。例如,在歐幾里得算法中,有兩個輸入,即m和n。
2、確定性:算法的每一個步驟必須要確切地定義。即算法中所有有待執行的動作必須嚴格而不含混地進行規定,不能有歧義性。例如,歐幾里得算法中,步驟1中明確規定“以m除以n,而不能有類似以m除n以或n除以m這類有兩種可能做法的規定。
3、有窮性:一個算法在執行有窮步滯后必須結束。也就是說,一個算法,它所包含的計算步驟是有限的。例如,在歐幾里得算法中,m和n均為正整數,在步驟1之后,r必小于n,若r不等于0,下一次進行步驟1時,n的值已經減小,而正整數的遞降序列最后必然要終止。因此,無論給定m和n的原始值有多大,步驟1的執行都是有窮次。
4、輸出:算法有一個或多個的輸出,即與輸入有某個特定關系的量,簡單地說就是算法的最終結果。例如,在歐幾里得算法中只有一個輸出,即步驟2中的n。
5、能行性:算法中有待執行的運算和操作必須是相當基本的,換言之,他們都是能夠精確地進行的,算法執行者甚至不需要掌握算法的含義即可根據該算法的每一步驟要求進行操作,并最終得出正確的結果。
算法的復雜度
1.時間復雜度:算法的時間復雜度是指算法需要消耗的時間資源。
2.空間復雜度:算法的空間復雜度是指算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。
1、用自然語言描述算法
前面關于歐幾里得算法以及算法實例的描述,使用的都是自然語言。自然語言是人們日常所用的語言,如漢語、英語、德語等。使用這些語言不用專門訓練,所描述的算法也通俗易懂。
2、用流程圖描述算法
在數學課程里,我們學習了用程序框圖來描述算法。在程序框圖中流程圖是描述算法的常用工具由一些圖形符號來表示算法。
3、用偽代碼描述算法
偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法的工具。它不用圖形符號,因此,書寫方便、格式緊湊,易于理解,便于向計算機程序設計語言過度。
基本方法
1.遞推法
遞推法是利用問題本身所具有的一種遞推關系求問題解的一種方法。它把問題分成若干步,找出相鄰幾步的關系,從而達到目的,此方法稱為遞推法。
2.遞歸法
遞歸指的是一個過程:函數不斷引用自身,直到引用的對象已知
3.窮舉搜索法
窮舉搜索法是對可能是解的眾多候選解按某種順序進行逐一枚舉和檢驗,并從眾找出那些符合要求的候選解作為問題的解。
4.貪婪法
貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。
5.分治法
分治法是把一個復雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。
6.動態規劃法
動態規劃是一種在數學和計算機科學中使用的,用于求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種算法的基礎,被廣泛應用于計算機科學和工程領域。
7.迭代法
迭代法是數值分析中通過從一個初始估計出發尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實現這一過程所使用的方法統稱為迭代法。
8.分支界限法
與貪婪算法一樣,這種方法也是用來為組合優化問題設計求解算法的,所不同的是它在問題的整個可能解空間搜索,所設計出來的算法雖其時間復雜度比貪婪算法高,但它的優點是與窮舉法類似,都能保證求出問題的最佳解,而且這種方法不是盲目的窮舉搜索,而是在搜索過程中通過限界,可以中途停止對某些不可能得到最優解的子空間進一步搜索(類似于人工智能中的剪枝),故它比窮舉法效率更高。