在如今的數(shù)字時代,算法是塑造技術(shù)和信息格局的隱形架構(gòu)師。這些復(fù)雜的規(guī)則和指令集合支撐著我們數(shù)字生活的幾乎每一個方面,從搜索引擎如何優(yōu)先顯示結(jié)果,到社交媒體如何呈現(xiàn)內(nèi)容。但是,算法究竟是什么?
從本質(zhì)上講,算法是一種有條不紊、分步驟解決問題或完成任務(wù)的方法。無論是簡單的數(shù)字相加公式,還是復(fù)雜的機(jī)器學(xué)習(xí)協(xié)議,算法都是軟件應(yīng)用的基礎(chǔ),確保任務(wù)能夠高效有效地執(zhí)行。在本文中,我們將揭開算法的神秘面紗,探討其起源、工作原理以及對社會和技術(shù)的影響。
一、什么是算法?一句話解釋:算法就是“做事的方法”
我們先不談復(fù)雜的數(shù)學(xué)公式,也不談編程語言,只說一句大白話:
算法就是一套“按部就班解決問題的步驟”。
比如你早上煮泡面,步驟是不是:
1.燒水;
2.水開后放面餅;
3.等3分鐘;
4.加調(diào)料包;
5.關(guān)火吃面。
這就是一個完整的“泡面算法”。換句話說,只要你提供原材料,按這個順序來,就能煮出一碗能吃的面。
所以,算法本質(zhì)上就是解決某個問題的一套“規(guī)則+步驟”。
算法(Algorism)一詞最初出現(xiàn)在 12 世紀(jì),是用于表示十進(jìn)制算術(shù)運(yùn)算的規(guī)則。18 世紀(jì),算法 Algorism 演變?yōu)? Algorithm,算法概念有了更廣的含義。任何定義明確的計(jì)算步驟都可稱為算法,或者說算法是合乎邏輯、簡捷的一系列步驟。
現(xiàn)在算法通常指可以用計(jì)算機(jī)來解決某一類問題的程序或步驟。
算法的特性問題不同,解決的思路和采取的方法與步驟就有針對性,所以對應(yīng)的算法也各不相同。
但是,各種算法有如下共同之處:
首先計(jì)算機(jī)要有操作對象,通過輸入,給予計(jì)算機(jī)問題所涉及的對象;
最后要能得到運(yùn)行結(jié)果,即有輸出;
在輸入與輸出之間是具體的方法和步驟,這些方法和步驟必須是確定的、正確的、有限的、有效的、通用的。
因而,運(yùn)行于計(jì)算機(jī)的各種算法有如下特征:
輸入:算法從一個指定集合得到輸入值,可以有 0 個、1 個或多個值,由賦值或輸入語句實(shí)現(xiàn);
輸出:對每個輸入值,算法都要從指定的集合中產(chǎn)生輸出值,輸出值就是問題的解,可以有 1 個或多個輸出值,由輸出語句實(shí)現(xiàn);
確定性:算法的步驟必須準(zhǔn)確定義,不能產(chǎn)生歧義;
正確性:對每一次輸入值,算法都應(yīng)產(chǎn)生正確的輸出值;
有限性:對任何輸入,算法都應(yīng)在有限步驟之后產(chǎn)生輸出;
有效性:算法每一步必須能夠準(zhǔn)確地執(zhí)行,并在有限時間內(nèi)完成;
通用性:算法不只是用于特定的輸入值,應(yīng)該可以用于滿足條件的所有問題。
【實(shí)例 1】找出計(jì)算機(jī)軟件專業(yè)錄取的新生中高考總分的最高分。
二、算法解決什么問題?——幫助我們高效、準(zhǔn)確地完成任務(wù)
很多事,我們都會做,但人做起來慢、累,還容易出錯。算法的意義就在于:讓機(jī)器學(xué)會我們的“套路”,然后比我們做得快、做得準(zhǔn)。
舉幾個例子你就懂了:
?? 1. 抖音、快手怎么知道你喜歡看什么?
后臺的推薦算法會分析你每一條視頻的瀏覽時間、點(diǎn)贊、評論,判斷你喜歡什么,然后推你更愛看的內(nèi)容。
就像朋友知道你喜歡吃辣的,下次請你吃飯,準(zhǔn)會帶你去川菜館。這就是“個性化推薦算法”。
?? 2. 淘寶怎么推薦你想買的東西?
你搜索過“登山鞋”,接下來淘寶首頁可能就出現(xiàn)“登山杖”“沖鋒衣”“登山包”——這背后就是“商品推薦算法”。
它的目標(biāo)是:根據(jù)你的行為,猜你還可能需要什么,然后推給你。
?? 3. 銀行怎么判斷誰可能逾期不還貸款?
銀行用“信用評分算法”,分析一個人收入、職業(yè)、借貸記錄、消費(fèi)習(xí)慣等等,評估他有沒有可能還不上錢。
這就像老一輩“借錢看人”,但機(jī)器更快、更準(zhǔn)。
三、算法的表現(xiàn)形式有哪些?——不止是數(shù)學(xué)公式,還有“規(guī)則”、“模型”和“程序”
通俗來講,算法可以是以下這些樣子:
1. 明確規(guī)則的“步驟表”
比如醫(yī)生判斷你是否發(fā)燒的算法:
測體溫;
超過37.3℃,判斷為發(fā)燒;
不超,判斷為正常。
這是一種“規(guī)則算法”。
2. 數(shù)據(jù)訓(xùn)練出來的“模型”
人工智能里的“算法”,很多是靠機(jī)器“自己學(xué)出來”的,比如人臉識別。
程序給機(jī)器喂幾十萬個有名字的照片,機(jī)器自己找規(guī)律——比如鼻子、眼睛距離、臉型比例……最后形成一個“識別模型”。這叫“機(jī)器學(xué)習(xí)算法”。
3. 寫在程序里的“邏輯代碼”
比如手機(jī)地圖導(dǎo)航里的路徑規(guī)劃算法,會考慮紅綠燈數(shù)量、道路擁堵、距離遠(yuǎn)近,最后算出一條最優(yōu)路線。
這就是嵌入在程序中的算法。
四、老百姓理解算法的幾個類比
? 類比1:算法像做菜的“菜譜”
每道菜都有固定步驟、先后順序、注意事項(xiàng)。做菜靠“菜譜”,算法就是解決問題的“操作指南”。
? 類比2:算法像打麻將的“打牌套路”
你抓到一手牌,怎么拆搭、什么時候碰、什么時候胡?高手有一套打法,這就是他的“算法”——套路和經(jīng)驗(yàn)的總結(jié)。
? 類比3:算法像醫(yī)院的“診療流程”
掛號→初診→檢查→確診→治療→復(fù)查,一步步來。這就是“流程算法”。
? 類比4:算法像交警的“交通指揮規(guī)則”
綠燈走、紅燈停,右轉(zhuǎn)讓直行。城市能有序運(yùn)行,就是因?yàn)椤敖煌ㄒ?guī)則算法”在發(fā)揮作用。
五、為什么現(xiàn)在大家都在說“算法”?因?yàn)樗絹碓街匾?
互聯(lián)網(wǎng)平臺靠它留住用戶(推薦算法)
企業(yè)靠它提升效率、節(jié)省人力(自動化算法)
政府靠它科學(xué)決策、精準(zhǔn)治理(數(shù)據(jù)分析算法)
個人靠它理財(cái)、學(xué)習(xí)、求職(個性化服務(wù)算法)
未來,每個人都可能是“算法的用戶”,甚至可以借助算法做決策、開公司、創(chuàng)事業(yè)。
六、老百姓如何用好“算法”?
1.認(rèn)識算法是怎么影響我們的:不要被短視頻、購物推薦“牽著鼻子走”;
2.用算法提升生活效率:比如地圖導(dǎo)航、健康管理APP、理財(cái)工具;
3.用算法做決策助手:比如教育推薦、崗位匹配等;
4.關(guān)注算法的透明與公平:算法不能“只讓平臺賺錢”,也要考慮用戶權(quán)益和隱私保護(hù)。
、常見算法的時間復(fù)雜度
以下是一些常見算法的時間復(fù)雜度,按照從最低到最高的順序排列:
常數(shù)時間復(fù)雜度 - O(1):
常數(shù)時間復(fù)雜度表示算法的執(zhí)行時間與輸入規(guī)模無關(guān),執(zhí)行時間是一個常數(shù)。
例如:訪問數(shù)組元素、執(zhí)行數(shù)學(xué)運(yùn)算。
對數(shù)時間復(fù)雜度 - O(log n):
對數(shù)時間復(fù)雜度通常出現(xiàn)在分治和二分查找算法中。
例如:二分查找、某些分治算法。
線性時間復(fù)雜度 - O(n):
線性時間復(fù)雜度表示算法的執(zhí)行時間與輸入規(guī)模成正比。
例如:遍歷數(shù)組、查找未排序的列表中的元素。
線性對數(shù)時間復(fù)雜度 - O(n log n):
線性對數(shù)時間復(fù)雜度通常出現(xiàn)在排序算法中,如快速排序和歸并排序。
例如:快速排序、歸并排序。
平方時間復(fù)雜度 - O(n^2):
平方時間復(fù)雜度表示算法的執(zhí)行時間與輸入規(guī)模的平方成正比。
例如:簡單的嵌套循環(huán)遍歷二維數(shù)組、冒泡排序。
立方時間復(fù)雜度 - O(n^3):
立方時間復(fù)雜度表示算法的執(zhí)行時間與輸入規(guī)模的立方成正比。
例如:三重嵌套循環(huán)遍歷三維數(shù)組。
指數(shù)時間復(fù)雜度 - O(2^n):
指數(shù)時間復(fù)雜度表示算法的執(zhí)行時間隨著輸入規(guī)模呈指數(shù)增長。
例如:窮舉法解決組合問題。
階乘時間復(fù)雜度 - O(n!):
階乘時間復(fù)雜度表示算法的執(zhí)行時間與輸入規(guī)模的階乘成正比。
例如:解決旅行商問題的窮舉法。
算法朝著最優(yōu)解的方向努力
無論使用哪種編程語言,算法都會根據(jù)一組輸入和定義的計(jì)算步驟序列產(chǎn)生結(jié)果或輸出。輸出的性質(zhì)可能會根據(jù)算法的目的和所要解決的問題而有很大的不同。
以下是算法產(chǎn)生的一些常見類型的輸出:
問題解決方案:算法通常被設(shè)計(jì)用來解決特定問題,例如計(jì)算地圖上兩點(diǎn)之間的最短路徑,對數(shù)字列表進(jìn)行排序,或找到兩個整數(shù)的最大公約數(shù)。
決策或分類:在機(jī)器學(xué)習(xí)和決策算法中,輸出可以是一個決策或分類。例如,垃圾郵件檢測算法將電子郵件分類為“垃圾郵件”或“非垃圾郵件”,而推薦算法則決定向用戶推薦哪些產(chǎn)品或內(nèi)容。
數(shù)值:許多算法會執(zhí)行計(jì)算并輸出數(shù)值。這包括數(shù)學(xué)計(jì)算的算法,例如求解方程的根或從數(shù)據(jù)集中計(jì)算統(tǒng)計(jì)量。
數(shù)據(jù)結(jié)構(gòu):一些算法會組織或處理數(shù)據(jù),并產(chǎn)生修改后的數(shù)據(jù)結(jié)構(gòu)作為輸出。例如,排序算法會將列表或數(shù)組重新排列為特定順序,而圖算法可能會輸出圖內(nèi)的樹或一組連通分量。
視覺表示:計(jì)算機(jī)圖形學(xué)和可視化中的算法將數(shù)值數(shù)據(jù)轉(zhuǎn)換為視覺形式,如圖像、圖表或動畫。例如,渲染算法根據(jù)我們在視頻游戲和模擬中看到的3D模型生成2D圖像。
文本內(nèi)容:為自然語言處理或生成而設(shè)計(jì)的算法可以產(chǎn)生文本內(nèi)容作為輸出。這包括生成類似人類文本的算法、翻譯語言或總結(jié)長文檔的算法。
信號或物理動作:在機(jī)器人和嵌入式系統(tǒng)中,算法可以產(chǎn)生控制發(fā)動機(jī)或其他執(zhí)行器的信號,從而在現(xiàn)實(shí)世界中產(chǎn)生物理動作。這可能像打開燈一樣簡單,也可能像協(xié)調(diào)機(jī)械臂的運(yùn)動一樣復(fù)雜。
總之
算法不是高高在上的科學(xué)名詞,它其實(shí)早已滲透在你我生活的每個角落。
它是一套做事的方法,一個解決問題的利器。只要你愿意了解一點(diǎn)點(diǎn)它的邏輯,你就能更聰明地生活、更高效地工作,甚至更有判斷力地面對這個智能時代。