學(xué)習(xí)筆記 | 走進(jìn)智能算法

?三金


刷知乎看到一個(gè)答主(知乎名:承志)在回答“編程能力主要是算法嗎?”中寫(xiě)到:

現(xiàn)在市面上大多數(shù)的算法崗位,所涉及到的都是智能算法,也就是所謂的大數(shù)據(jù)算法。這類算法的特點(diǎn)是基于海量的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)或預(yù)測(cè),更偏向于統(tǒng)計(jì)。這類問(wèn)題一般來(lái)說(shuō)沒(méi)有最優(yōu)解,只有近似解,通過(guò)優(yōu)化模型和方法,可以獲得更好的效果。這和ACM比賽涉及到的性能算法不太相同,性能算法是在規(guī)定的時(shí)限和空間內(nèi)計(jì)算出要求的結(jié)果,并且這個(gè)結(jié)果是固定的。

答主(知乎名:Java編程指導(dǎo))進(jìn)一步指出,要說(shuō)智能算法,首先要提到智能計(jì)算。智能計(jì)算也有人稱之為“軟計(jì)算”。智能算法就是人們受到自然(生物界)規(guī)律的啟迪,根據(jù)其原理,模仿求解問(wèn)題的算法。從自然界得到啟迪,模仿其結(jié)構(gòu)進(jìn)行發(fā)明創(chuàng)造,就這就仿生學(xué)。這是我們向自然界學(xué)習(xí)的一個(gè)方面。另一方面,我們還可以利用仿生原理進(jìn)行設(shè)計(jì)(包括設(shè)計(jì)算法),這就是智能計(jì)算的思想,包括人工神經(jīng)網(wǎng)絡(luò)技術(shù)、遺傳算法、模擬退火算法、模擬退火技術(shù)和群集智能技術(shù)等。

還有一位答主總結(jié)這些算法背后的數(shù)學(xué)原理,大部分都和概率論有關(guān)。

最常用的智能算法有遺傳算法、免疫算法、退火算法、粒子群算法、魚(yú)群算法、蟻群算法和神經(jīng)網(wǎng)絡(luò)算法。


part1 必備數(shù)據(jù)結(jié)構(gòu)

學(xué)習(xí)方法:不求深,但求廣。
數(shù)據(jù)結(jié)構(gòu)包含三個(gè)要素:邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)(物理結(jié)構(gòu))、數(shù)據(jù)的運(yùn)算。
其中邏輯結(jié)構(gòu)又分為線性結(jié)構(gòu)(線性表、棧、隊(duì)列)和非線性結(jié)構(gòu)(樹(shù)、圖、集合)。

1、鏈表

采用鏈?zhǔn)酱鎯?chǔ)時(shí),邏輯上相鄰的元素,物理存儲(chǔ)位置則不一定相鄰,對(duì)應(yīng)的邏輯關(guān)系是通過(guò)指針鏈接來(lái)表示的。

2、樹(shù)

二叉樹(shù)的特點(diǎn)是每個(gè)結(jié)點(diǎn)之多只有兩顆子樹(shù),并且二叉樹(shù)的子樹(shù)有左右之分,其次序不能任意顛倒,與樹(shù)相似,二叉樹(shù)也以遞歸的形式定義。

3、數(shù)組

4、復(fù)雜度分析(Big-O analysis)


part2 必刷題型

刷題路徑:自己做-》參考好解法-》優(yōu)化自己的解法-》不停地優(yōu)化-》尋找相同題型重復(fù)練習(xí)-》總結(jié)。前期先接受自己的思考方式,暴力解法其實(shí)也是一種有效的解法。


排序與查找

1、排序(快速排序Quicksort和歸并排序merge sort)

知識(shí)點(diǎn)

回顧下之前寫(xiě)的這篇文章《幾種常見(jiàn)的排序算法》。
歸并排序是分治法的一個(gè)應(yīng)用。我們常把貪心算法、動(dòng)態(tài)規(guī)劃和分解法放在一起談?wù)摗?br> 1.快速排序的基本過(guò)程、時(shí)間復(fù)雜度、空間復(fù)雜度和穩(wěn)定性。
2.堆排序過(guò)程,復(fù)雜度和穩(wěn)定性。
3.a[0]-a[10]實(shí)現(xiàn)堆排序,并計(jì)算時(shí)間復(fù)雜度。

刷題總結(jié)

2、二叉搜索樹(shù)(二分搜索樹(shù)Binary search trees)

知識(shí)點(diǎn)

1.樹(shù)給定前序遍歷和中序遍歷是否可以還原出二叉樹(shù)并證明,如果給定前序和后序呢?

刷題總結(jié)

3、哈希表(Hash tables)

知識(shí)點(diǎn)

哈希表又稱為散列表,是根據(jù)關(guān)鍵字碼的值直接進(jìn)行訪問(wèn)的數(shù)據(jù)結(jié)構(gòu),即它通過(guò)把關(guān)鍵碼的值映射到表中的一個(gè)位置以加速查找速度,其中映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表。

hash_map基于hash table(哈希表)。哈希表最大的優(yōu)點(diǎn),就是把數(shù)據(jù)的存儲(chǔ)和查找消耗的時(shí)間大大降低,幾乎可以看成是常數(shù)時(shí)間;而代價(jià)僅僅是消耗比較多的內(nèi)存。然而在當(dāng)前可利用內(nèi)存越來(lái)越多的情況下,用空間換時(shí)間的做法是值得的。另外,編碼比較容易也是它的特點(diǎn)之一。它以鍵和值組成的對(duì)為基礎(chǔ)。

統(tǒng)計(jì)字符在字符串出現(xiàn)的次數(shù),或是否在某字符串中出現(xiàn)等等這類問(wèn)題可以用哈希表來(lái)處理。當(dāng)字符是8位時(shí),可以建立一個(gè)長(zhǎng)度為256的哈希表(形式是數(shù)組),數(shù)組的下標(biāo)是字符對(duì)應(yīng)的ASCII碼,數(shù)組的值可以是出現(xiàn)的次數(shù),或者是否出現(xiàn)的布爾型變量。[1]

刷題總結(jié)

4、二維數(shù)組(2D arrays)

二維數(shù)組行地址、列地址。


part3 必學(xué)機(jī)器學(xué)習(xí)算法

學(xué)習(xí)方法:掌握機(jī)器學(xué)習(xí)的算法的具體原理,最好手動(dòng)推導(dǎo)這些算法的數(shù)學(xué)部分,而不是走馬觀花地看一遍。

001 監(jiān)督學(xué)習(xí)

1、線性回歸(Linear Regression)??

2、邏輯回歸(Logistic Regression)??

Logistic回歸的損失函數(shù)和梯度分別是多少

3、支持向量機(jī)(Support Vector Machine,SVM)

SVM的數(shù)學(xué)推導(dǎo)

4、樸素貝葉斯(Naive Bayes)??

5、最近鄰居/k-近鄰算法(K-Nearest Neighbors,KNN)

6、EM??

7、降維(Dimensional Reduction)

8、梯度增加(Gradient Boosting)

9、決策樹(shù)(Decision Tree)

10、k-平均(K-Means)

11、隨機(jī)森林(Random Forest)

002 非監(jiān)督學(xué)習(xí)

1、主成分分析??

2、聚類分析

3、關(guān)聯(lián)規(guī)則學(xué)習(xí)

4、馬爾可夫鏈蒙特卡洛法??

003 最優(yōu)化

1、梯度下降法??

2、牛頓法

3、動(dòng)態(tài)規(guī)劃(Dynamic programming)


part4 概率論小題

學(xué)習(xí)方法:不需要很強(qiáng)的計(jì)算能力,但需要很深的功底。前提是要理解,而不是死記硬背。
1、如何生成概率為pi/4的事件?

2.事件和隨機(jī)變量(random variables)之間相互獨(dú)立(mutually independent)和兩兩獨(dú)立(pairwise independent)分別是什么意思?

3.在圓周上隨機(jī)抽取3個(gè)點(diǎn),問(wèn)圓心包含在他們構(gòu)成的三角形內(nèi)的概率是多少?如何寫(xiě)一個(gè)程序來(lái)驗(yàn)證你的結(jié)果?

4.給定一個(gè)未知概率的不均勻硬幣,即一個(gè)能夠生成X~Ber(p)未知的隨機(jī)數(shù)生成器,如果生成一個(gè)0,1,2,…,M?1之間的隨機(jī)數(shù)。假設(shè)隨機(jī)數(shù)生成器是一個(gè)函數(shù)f,試寫(xiě)一個(gè)程序來(lái)生成需要的隨機(jī)數(shù)。平均對(duì)f的調(diào)用次數(shù)/投擲硬幣的次數(shù)是多少?可以如何優(yōu)化?如果檢驗(yàn)結(jié)果是否足夠隨機(jī)?

5.給定一個(gè)均勻硬幣,如果構(gòu)造一個(gè)概率為p的伯努利變量?其中p已知但不一定是有理數(shù)(rational number)。若均勻硬幣生成器是一個(gè)函數(shù)f是一個(gè)傳入的參數(shù),寫(xiě)一個(gè)程序來(lái)生成X~Ber(p)。

6.我國(guó)的駕照科目一考試的題庫(kù)為1000題,你下載了一個(gè)手機(jī)App可以進(jìn)行模擬考試。每次模擬考試會(huì)從這1000題中隨機(jī)選出100道不重復(fù)的題。如果你進(jìn)行了10次模擬考試,那么你見(jiàn)到過(guò)的題庫(kù)中的題目數(shù)量的期望值為多少? 寫(xiě)一個(gè)程序驗(yàn)證這個(gè)結(jié)論。


參考資料:
1.《統(tǒng)計(jì)學(xué)習(xí)方法》 李航
2.公眾號(hào):編程員寶藏。特別感謝這個(gè)公眾號(hào),參考了它【計(jì)算機(jī)考研復(fù)試面試】?jī)?nèi)容,歸納總結(jié)一級(jí)棒!


  1. 版權(quán)聲明:本文為CSDN博主「melody96313」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
    原文鏈接:https://blog.csdn.net/melody96313/java/article/details/79721072 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容