一文了解計(jì)算機(jī)領(lǐng)域中的算法
算法(algorithm)是一個(gè)非常廣泛的概念,在不同的領(lǐng)域有不同的含義。在計(jì)算機(jī)領(lǐng)域中,算法也有其特定的含義而不是普遍意義上理解的應(yīng)用級(jí)算法。
計(jì)算機(jī)科學(xué)中,算法是用于解決特定問題或執(zhí)行特定任務(wù)的一個(gè)清晰、精確、有限的指令集合。算法執(zhí)行后必然產(chǎn)生一個(gè)或多個(gè)結(jié)果,為了獲得結(jié)果,每個(gè)算法還會(huì)有零個(gè)或多個(gè)輸入內(nèi)容作為前置條件。算法的清晰性是指每個(gè)步驟都沒有歧義;精確性是指每次的執(zhí)行結(jié)果都一樣;有限性是算法在有限的步驟內(nèi)可以執(zhí)行完成。
為了清晰的表達(dá)算法,可以用兩種方式對(duì)算法進(jìn)行描述:偽代碼和流程圖。偽代碼是一種結(jié)構(gòu)化的文章描述,介于自然語言和符號(hào)化的編程語言之間。它與代碼十分接近,但并不考慮開發(fā)語言執(zhí)行過程中的細(xì)節(jié),例如:內(nèi)存管理、數(shù)據(jù)存儲(chǔ)等。流程圖用幾種圖形表示不同的計(jì)算機(jī)操作,再用線條將這些操作連接到一起,形成操作的執(zhí)行順序。
偽代碼和流程圖示意圖
評(píng)估算法包括時(shí)間復(fù)雜度和空間復(fù)雜度。時(shí)間復(fù)雜度指當(dāng)待解決的問題規(guī)模擴(kuò)大時(shí),所消耗的時(shí)間按什么比例進(jìn)行增長(zhǎng)。最理想的復(fù)雜度是O(1),運(yùn)行時(shí)間與問題規(guī)模無關(guān)是一個(gè)常數(shù)時(shí)間。但更多的時(shí)候時(shí)間會(huì)按照線性增長(zhǎng)O(n)或指數(shù)級(jí)增長(zhǎng)O(n^2),我們需要通過算法將時(shí)間復(fù)雜度降低到O(log n)或O(nlog n)。降低時(shí)間復(fù)雜度的最有效辦法就是增加空間復(fù)雜度,算法的設(shè)計(jì)就是不斷的平衡時(shí)間和空間復(fù)雜度。
計(jì)算機(jī)算法的最終目的是解決數(shù)據(jù)的查詢問題,為了能夠快速進(jìn)行查詢就需要對(duì)數(shù)據(jù)進(jìn)行“排序”等預(yù)處理,并且配合數(shù)據(jù)結(jié)構(gòu)解決數(shù)據(jù)之間的組織關(guān)系和數(shù)據(jù)存儲(chǔ)問題。不同的數(shù)據(jù)結(jié)構(gòu)決定著可采用的算法。因此衍生出,樹形存儲(chǔ)結(jié)構(gòu)的深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS);數(shù)組和鏈表存儲(chǔ)結(jié)構(gòu)的冒泡排序、快速排序和歸并排序等。
算法的含義還有很多,它們都是在不同領(lǐng)域用于解決特定問題的方法。作為應(yīng)用類的AI算法就包括圖像識(shí)別算法、語音識(shí)別算法以及當(dāng)下最火的LLM大語言模型和可以生成動(dòng)畫的SORA模型。