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