更新時(shí)間:2020-12-03 17:19:01 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2067次
算法(Algorithm)是指解題方案的準(zhǔn)確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機(jī)制。不同的算法可能用不同的時(shí)間、空間或效率來完成同樣的任務(wù),也就是它們的空間復(fù)雜度與時(shí)間復(fù)雜度可以,但是算法必須要有算法的5種基本特征。
1.有窮性(Finiteness)
算法的有窮性是指算法必須能在執(zhí)行有限個(gè)步驟之后終止。這一點(diǎn)很好理解,倘若一個(gè)算法需要執(zhí)行無限個(gè)步驟而得不出結(jié)果,那么這個(gè)算法是毫無意義的。除此之外,也是避免了算法陷入死循環(huán)中,這樣也是毫無意義的。比如下面的例子:
void fa( )
{
int i=0,s=0;
while(i<10) //死循環(huán)
s++; //不滿足有窮性
i++;
printf(“s=%d,i=%d\n“,s,i);
}
void fb( )
{
int i=0,s=0;
while(i<10) //i<10執(zhí)行多少次
{
s++; //s++執(zhí)行?次
i++; // i++ 執(zhí)行?次
}
printf(“s=%d,i=%d\n“,s,i);
}
2.確切性(Definiteness)
一個(gè)算法的每一步驟必須有確切的定義。對(duì)于每一種情況,需要執(zhí)行的動(dòng)作都應(yīng)嚴(yán)格地、清晰地規(guī)定。這從很大程度上增強(qiáng)了算法的嚴(yán)謹(jǐn)性,本身算法的定義中,算法是一系列解決問題的清晰指令,每一步都是有意義的。
3.輸入(Input)
一個(gè)算法有零個(gè)或多個(gè)輸入,以刻畫運(yùn)算對(duì)象的初始情況,所謂零個(gè)輸入是指算法本身給定了初始條件。這些輸入取自于特定的對(duì)象的集合。它們可以使用輸入語句由外部提供,也可以使用賦值語句在算法內(nèi)給定。
4.輸出(Output):
一個(gè)算法有一個(gè)或多個(gè)輸出。算法本身就是為了解決問題得到答案的,所以,沒有輸出的算法毫無意義。
5.可行性(Effectiveness)
一個(gè)算法的任何計(jì)算步驟都是可以被分解為基本可執(zhí)行的操作,每個(gè)操作都能夠在有限時(shí)間內(nèi)完成。
算法中的指令描述的是一個(gè)計(jì)算,當(dāng)其運(yùn)行時(shí)能從一個(gè)初始狀態(tài)和(可能為空的)初始輸入開始,經(jīng)過一系列有限而清晰定義的狀態(tài),最終產(chǎn)生輸出并停止于一個(gè)終態(tài)。一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)移不一定是確定的。但不管怎樣,算法本身還是要滿足上述的算法的5個(gè)基本特征的,包括隨機(jī)化算法在內(nèi)的一些算法,都必須包含了一些隨機(jī)輸入。快來本站的數(shù)據(jù)結(jié)構(gòu)與算法教程學(xué)習(xí)各種各樣的算法,解決各種疑難問題吧。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743