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