點擊上方“小白學(xué)視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達

本文轉(zhuǎn)自:深度學(xué)習(xí)與計算機視覺
作者:Cat Chen
https://www.zhihu.com/question/23148377/answer/751465017
在工作時,沒有什么核心算法是必須掌握的,更需要的是對算法背后思想的理解,使得你在需要時能想起這個算法來。只要你能想起這個算法的名字,上網(wǎng)搜一下就能找到對這個算法的詳細解釋,這個算法的主流語言實現(xiàn)也肯定能找到。所以你懂不懂某個算法不重要,重要的是關(guān)鍵時候能想起它。在面試時,有很多基礎(chǔ)算法必須能熟練運用和默寫代碼。這你通過刷題來掌握就可以了,反正你沒真弄懂的話面試后就不記得了。
作者:程其一
https://www.zhihu.com/question/23148377/answer/974518148算法一:快速排序算法
快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序n個項目要Ο(nlogn)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他Ο(nlogn)算法更快,因為它的內(nèi)部循環(huán)(innerloop)可以在大部分的架構(gòu)上很有效率地被實現(xiàn)出來??焖倥判蚴褂梅种畏ǎ―ivideandconquer)策略來把一個串行(list)分為兩個子串行(sub-lists)。算法步驟:
1.從數(shù)列中挑出一個元素,稱為“基準”(pivot)
2.重新排序數(shù)列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數(shù)可以到任一邊)。在這個分區(qū)退出之后,該基準就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作。
3.遞歸地(recursive)把小于基準值元素的子數(shù)列和大于基準值元素的子數(shù)列排序。遞歸的最底部情形,是數(shù)列的大小是零或一,也就是永遠都已經(jīng)被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。
堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。堆積是一個近似完全二叉樹的結(jié)構(gòu),并同時滿足堆積的性質(zhì):即子結(jié)點的鍵值或索引總是小于(或者大于)它的父節(jié)點。堆排序的平均時間復(fù)雜度為Ο(nlogn) 。算法步驟:
3.把堆的尺寸縮小1,并調(diào)用shift_down(0),目的是把新的數(shù)組頂端數(shù)據(jù)調(diào)整到相應(yīng)位置歸并排序(Mergesort,臺灣譯作:合并排序)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(DivideandConquer)的一個非常典型的應(yīng)用。算法步驟:
1.申請空間,使其大小為兩個已經(jīng)排序序列之和,該空間用來存放合并后的序列2.設(shè)定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置3.比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置4.重復(fù)步驟3直到某一指針達到序列尾5.將另一序列剩下的所有元素直接復(fù)制到合并序列尾算法四:二分查找算法
二分查找算法是一種在有序數(shù)組中查找某一特定元素的搜索算法。搜素過程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。
如果在某一步驟數(shù)組為空,則代表找不到。這種搜索算法每一次比較都使搜索范圍縮小一半。折半搜索每次把搜索區(qū)域減少一半,時間復(fù)雜度為Ο(logn) 。
算法五:BFPRT(線性查找算法)
BFPRT算法解決的問題十分經(jīng)典,即從某n個元素的序列中選出第k大(第k?。┑脑?,通過巧妙的分析,BFPRT可以保證在最壞情況下仍為線性時間復(fù)雜度。該算法的思想與快速排序思想相似,當然,為使得算法在最壞情況下,依然能達到o(n)的時間復(fù)雜度,五位算法作者做了精妙的處理。算法步驟:
1.將n個元素每5個一組,分成n/5(上界)組。
2.取出每一組的中位數(shù),任意排序方法,比如插入排序。
3.遞歸的調(diào)用selection算法查找上一步中所有中位數(shù)的中位數(shù),設(shè)為x,偶數(shù)個中位數(shù)的情況下設(shè)定為選取中間小的一個。
4.用x來分割數(shù)組,設(shè)小于等于x的個數(shù)為k,大于x的個數(shù)即為n-k。
5.若i==k,返回x;若i<k,在小于x的元素中遞歸查找第i小的元素;若i>k,在大于x的元素中遞歸查找第i-k小的元素。終止條件:n=1時,返回的即是i小元素。算法六:DFS(深度優(yōu)先搜索)
深度優(yōu)先搜索算法(Depth-First-Search),是搜索算法的一種。它沿著樹的深度遍歷樹的節(jié)點,盡可能深的搜索樹的分支。當節(jié)點v的所有邊都己被探尋過,搜索將回溯到發(fā)現(xiàn)節(jié)點v的那條邊的起始節(jié)點。這一過程一直進行到已發(fā)現(xiàn)從源節(jié)點可達的所有節(jié)點為止。
如果還存在未被發(fā)現(xiàn)的節(jié)點,則選擇其中一個作為源節(jié)點并重復(fù)以上過程,整個進程反復(fù)進行直到所有節(jié)點都被訪問為止。DFS屬于盲目搜索。深度優(yōu)先搜索是圖論中的經(jīng)典算法,利用深度優(yōu)先搜索算法可以產(chǎn)生目標圖的相應(yīng)拓撲排序表,利用拓撲排序表可以方便的解決很多相關(guān)的圖論問題,如最大路徑問題等等。一般用堆數(shù)據(jù)結(jié)構(gòu)來輔助實現(xiàn)DFS算法。
深度優(yōu)先遍歷圖算法步驟:
1.訪問頂點v;
2.依次從v的未被訪問的鄰接點出發(fā),對圖進行深度優(yōu)先遍歷;直至圖中和v有路徑相通的頂點都被訪問;
3.若此時圖中尚有頂點未被訪問,則從一個未被訪問的頂點出發(fā),重新進行深度優(yōu)先遍歷,直到圖中所有頂點均被訪問過為止。DFS在訪問圖中某一起始頂點v后,由v出發(fā),訪問它的任一鄰接頂點w1;再從w1出發(fā),訪問與w1鄰接但還沒有訪問過的頂點w2;然后再從w2出發(fā),進行類似的訪問,…如此進行下去,直至到達所有的鄰接頂點都被訪問過的頂點u為止。接著,退回一步,退到前一次剛訪問過的頂點,看是否還有其它沒有被訪問的鄰接頂點。如果有,則訪問此頂點,之后再從此頂點出發(fā),進行與前述類似的訪問;如果沒有,就再退回一步進行搜索。重復(fù)上述過程,直到連通圖中所有頂點都被訪問過為止。算法七:BFS(廣度優(yōu)先搜索)廣度優(yōu)先搜索算法
(Breadth-First-Search),是一種圖形搜索算法。簡單的說,BFS是從根節(jié)點開始,沿著樹(圖)的寬度遍歷樹(圖)的節(jié)點。如果所有節(jié)點均被訪問,則算法中止。BFS同樣屬于盲目搜索。一般用隊列數(shù)據(jù)結(jié)構(gòu)來輔助實現(xiàn)BFS算法。算法步驟:
1.首先將根節(jié)點放入隊列中。
2.從隊列中取出第一個節(jié)點,并檢驗它是否為目標。如果找到目標,則結(jié)束搜尋并回傳結(jié)果。否則將它所有尚未檢驗過的直接子節(jié)點加入隊列中。
3.若隊列為空,表示整張圖都檢查過了——亦即圖中沒有欲搜尋的目標。結(jié)束搜尋并回傳“找不到目標”。
4.重復(fù)步驟2。
算法八:Dijkstra算法戴克斯特拉算法
(Dijkstra’salgorithm)是由荷蘭計算機科學(xué)家艾茲赫爾·戴克斯特拉提出。迪科斯徹算法使用了廣度優(yōu)先搜索解決非負權(quán)有向圖的單源最短路徑問題,算法最終得到一個最短路徑樹。該算法常用于路由算法或者作為其他圖算法的一個子模塊。該算法的輸入包含了一個有權(quán)重的有向圖G,以及G中的一個來源頂點S。我們以V表示G中所有頂點的集合。每一個圖中的邊,都是兩個頂點所形成的有序元素對。(u,v)表示從頂點u到v有路徑相連。我們以E表示G中所有邊的集合,而邊的權(quán)重則由權(quán)重函數(shù)w:E→[0,∞]定義。
因此,w(u,v)就是從頂點u到頂點v的非負權(quán)重(weight)。邊的權(quán)重可以想像成兩個頂點之間的距離。任兩點間路徑的權(quán)重,就是該路徑上所有邊的權(quán)重總和。已知有V中有頂點s及t,Dijkstra算法可以找到s到t的最低權(quán)重路徑(例如,最短路徑)。
這個算法也可以在一個圖中,找到從一個頂點s到任何其他頂點的最短路徑。對于不含負權(quán)的有向圖,Dijkstra算法是目前已知的最快的單源最短路徑算法。
算法步驟:
1.初始時令S={V0},T={其余頂點},T中頂點對應(yīng)的距離值,若存在<V0,Vi>,d(V0,Vi)為<V0,Vi>弧上的權(quán)值;若不存在<V0,Vi>,d(V0,Vi)為∞。2.從T中選取一個其距離值為最小的頂點W且不在S中,加入S3.對其余T中頂點的距離值進行修改:若加進W作中間頂點,從V0到Vi的距離值縮短,則修改此距離值重復(fù)上述步驟2、3,直到S中包含所有頂點,即W=Vi為止動態(tài)規(guī)劃(Dynamicprogramming)是一種在數(shù)學(xué)、計算機科學(xué)和經(jīng)濟學(xué)中使用的,通過把原問題分解為相對簡單的子問題的方式求解復(fù)雜問題的方法。動態(tài)規(guī)劃常常適用于有重疊子問題和最優(yōu)子結(jié)構(gòu)性質(zhì)的問題,動態(tài)規(guī)劃方法所耗時間往往遠少于樸素解法。動態(tài)規(guī)劃背后的基本思想非常簡單。大致上,若要解一個給定問題,我們需要解其不同部分(即子問題),再合并子問題的解以得出原問題的解。通常許多子問題非常相似,為此動態(tài)規(guī)劃法試圖僅僅解決每個子問題一次,從而減少計算量:一旦某個給定子問題的解已經(jīng)算出,則將其記憶化存儲,以便下次需要同一個子問題解之時直接查表。
這種做法在重復(fù)子問題的數(shù)目關(guān)于輸入的規(guī)模呈指數(shù)增長時特別有用。關(guān)于動態(tài)規(guī)劃最經(jīng)典的問題當屬背包問題。
算法步驟:
1.最優(yōu)子結(jié)構(gòu)性質(zhì)。如果問題的最優(yōu)解所包含的子問題的解也是最優(yōu)的,我們就稱該問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)(即滿足最優(yōu)化原理)。最優(yōu)子結(jié)構(gòu)性質(zhì)為動態(tài)規(guī)劃算法解決問題提供了重要線索。2.子問題重疊性質(zhì)。子問題重疊性質(zhì)是指在用遞歸算法自頂向下對問題進行求解時,每次產(chǎn)生的子問題并不總是新問題,有些子問題會被重復(fù)計算多次。動態(tài)規(guī)劃算法正是利用了這種子問題的重疊性質(zhì),對每一個子問題只計算一次,然后將其計算結(jié)果保存在一個表格中,當再次需要計算已經(jīng)計算過的子問題時,只是在表格中簡單地查看一下結(jié)果,從而獲得較高的效率。
算法十:樸素貝葉斯分類算法
樸素貝葉斯分類算法是一種基于貝葉斯定理的簡單概率分類算法。貝葉斯分類的基礎(chǔ)是概率推理,就是在各種條件的存在不確定,僅知其出現(xiàn)概率的情況下,如何完成推理和決策任務(wù)。概率推理是與確定性推理相對應(yīng)的。而樸素貝葉斯分類器是基于獨立假設(shè)的,即假設(shè)樣本每個特征與其他特征都不相關(guān)。
樸素貝葉斯分類器依靠精確的自然概率模型,在有監(jiān)督學(xué)習(xí)的樣本集中能獲取得非常好的分類效果。在許多實際應(yīng)用中,樸素貝葉斯模型參數(shù)估計使用最大似然估計方法,換言之樸素貝葉斯模型能工作并沒有用到貝葉斯概率或者任何貝葉斯模型。
盡管是帶著這些樸素思想和過于簡單化的假設(shè),但樸素貝葉斯分類器在很多復(fù)雜的現(xiàn)實情形中仍能夠取得相當好的效果。
作者:馬遙
https://www.zhihu.com/question/23148377/answer/341583043信息學(xué)競賽里面常見的算法,能用到游戲里的鳳毛麟角。游戲里面用的算法要么很樸素,要么專業(yè)性非常強。和什么貪心、背包、動歸之類的基本沒什么關(guān)系。3D引擎算法非常多,但是此算法非彼算法,感覺不是一個路數(shù)。唯一做過有印象的是做臟字過濾,用到了類似霍夫曼樹的壓縮編碼機制,把許多臟詞編到一棵樹里。作者:一一哥
https://www.zhihu.com/question/23148377/answer/9467966951、冒泡排序
冒泡排序是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。2、選擇排序
選擇排序(Selection-sort)是一種簡單直觀的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最?。ù螅┰?,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。3、插入排序
插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。4、希爾排序
1959年Shell發(fā)明,第一個突破O(n2)的排序算法,是簡單插入排序的改進版。它與插入排序的不同之處在于,它會優(yōu)先比較距離較遠的元素。希爾排序又叫縮小增量排序。5、歸并排序
歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為2-路歸并。6、快速排序
快速排序的基本思想:通過一趟排序?qū)⒋庞涗浄指舫瑟毩⒌膬刹糠?,其中一部分記錄的關(guān)鍵字均比另一部分的關(guān)鍵字小,則可分別對這兩部分記錄繼續(xù)進行排序,以達到整個序列有序。7、堆排序
堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。堆積是一個近似完全二叉樹的結(jié)構(gòu),并同時滿足堆積的性質(zhì):即子結(jié)點的鍵值或索引總是小于(或者大于)它的父節(jié)點。8、計數(shù)排序
計數(shù)排序不是基于比較的排序算法,其核心在于將輸入的數(shù)據(jù)值轉(zhuǎn)化為鍵存儲在額外開辟的數(shù)組空間中。作為一種線性時間復(fù)雜度的排序,計數(shù)排序要求輸入的數(shù)據(jù)必須是有確定范圍的整數(shù)。9、桶排序
桶排序是計數(shù)排序的升級版。它利用了函數(shù)的映射關(guān)系,高效與否的關(guān)鍵就在于這個映射函數(shù)的確定。桶排序 (Bucket sort)的工作的原理:假設(shè)輸入數(shù)據(jù)服從均勻分布,將數(shù)據(jù)分到有限數(shù)量的桶里,每個桶再分別排序(有可能再使用別的排序算法或是以遞歸方式繼續(xù)使用桶排序進行排)。10、基數(shù)排序
基數(shù)排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次類推,直到最高位。有時候有些屬性是有優(yōu)先級順序的,先按低優(yōu)先級排序,再按高優(yōu)先級排序。最后的次序就是高優(yōu)先級高的在前,高優(yōu)先級相同的低優(yōu)先級高的在前。二.數(shù)據(jù)結(jié)構(gòu)
數(shù)組是可以再內(nèi)存中連續(xù)存儲多個元素的結(jié)構(gòu),在內(nèi)存中的分配也是連續(xù)的,數(shù)組中的元素通過數(shù)組下標進行訪問,數(shù)組下標從0開始。2、棧
棧是一種特殊的線性表,僅能在線性表的一端操作,棧頂允許操作,棧底不允許操作。棧的特點是:先進后出,或者說是后進先出,從棧頂放入元素的操作叫入棧,取出元素叫出棧。3、隊列
隊列與棧一樣,也是一種線性表,不同的是,隊列可以在一端添加元素,在另一端取出元素,也就是:先進先出。從一端放入元素的操作稱為入隊,取出元素為出隊。4、鏈表
鏈表是物理存儲單元上非連續(xù)的、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表的指針地址實現(xiàn),每個元素包含兩個結(jié)點,一個是存儲元素的數(shù)據(jù)域 (內(nèi)存空間),另一個是指向下一個結(jié)點地址的指針域。根據(jù)指針的指向,鏈表能形成不同的結(jié)構(gòu),例如單鏈表,雙向鏈表,循環(huán)鏈表等。5、樹
樹是一種數(shù)據(jù)結(jié)構(gòu),它是由n(n>=1)個有限節(jié)點組成一個具有層次關(guān)系的集合。在日常的應(yīng)用中,我們討論和用的更多的是樹的其中一種結(jié)構(gòu)是二叉樹。6、散列表
散列表,也叫哈希表,是根據(jù)關(guān)鍵碼和值 (key和value) 直接進行訪問的數(shù)據(jù)結(jié)構(gòu),通過key和value來映射到集合中的一個位置,這樣就可以很快找到集合中的對應(yīng)元素。7、堆
堆是一種比較特殊的數(shù)據(jù)結(jié)構(gòu),可以被看做一棵樹的數(shù)組對象,具有以下的性質(zhì):堆中某個節(jié)點的值總是不大于或不小于其父節(jié)點的值;8、圖
圖是由結(jié)點的有窮集合V和邊的集合E組成。其中,為了與樹形結(jié)構(gòu)加以區(qū)別,在圖結(jié)構(gòu)中常常將結(jié)點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關(guān)系。三.遞歸
一種計算過程,如果其中每一步都要用到前一步或前幾步的結(jié)果,稱為遞歸的。用遞歸過程定義的函數(shù),稱為遞歸函數(shù),例如連加、連乘及階乘等。作者:茹姐
https://www.zhihu.com/question/23148377/answer/768492489對于程序員來講,數(shù)據(jù)結(jié)構(gòu)和算法還是很重要的。但是你從事不同的領(lǐng)域所要掌握的算法也不同,下面我們就羅列一些基本的算法:枚舉、貪心、遞歸。除了這些還有以下:
搜索:粗略地說,只要知道兩種類型的搜索算法:順序搜索和二分搜索。深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)也非常重要。排序:排序的算法有很多,但是選幾個比較常見的掌握就可以了。比如冒泡排序,選擇排序,插入排序,快速排序,希爾排序,歸并排序等。還有就是一些數(shù)據(jù)結(jié)構(gòu):比如數(shù)組、鏈表、堆棧、隊列、哈希表、樹等。還想了解更多,建議去看看算法書吧:算法(第4版):
作者:LoveJenny
https://www.zhihu.com/question/23148377/answer/36996055
https://www.zhihu.com/question/23148377/answer/37698533廣泛的說,《數(shù)據(jù)結(jié)構(gòu)》、《運籌學(xué)》、《Introduction to algorithms》這三本書里的算法都應(yīng)該了解,對于搜索類算法應(yīng)該熟悉,其余至少知道大致思想和特點。不要把動態(tài)規(guī)劃當算法,因為dp其實是一種思想而不是算法,要實現(xiàn)dp完全可以脫離原本的循環(huán)遍歷模式而使用各種最短路、記憶化搜索等等具體算法。此外,《機器學(xué)習(xí)與人工智能》里的算法都應(yīng)了解并且掌握?,F(xiàn)實問題大多數(shù)都是近似問題,不一定非要求最優(yōu)解,近似算法會經(jīng)常派得上用場。畢竟,做ACM與實際做軟件對算法需求差異還挺大的,當然大公司專注做后臺復(fù)雜計算的另說…作者:伊撒爾
https://www.zhihu.com/question/23148377/answer/1022408813其實說算法不太合適,我覺得其實重要的是數(shù)據(jù)結(jié)構(gòu)不同的數(shù)據(jù)結(jié)構(gòu)適合做不同的事情,我個人特別喜歡將同一個實現(xiàn)用不同的結(jié)構(gòu)去實現(xiàn),然后對比差異和好壞
但你要和我說算法,說實話真的沒什么興趣去刷題
我一直認為,算法不是用來提高【代碼能力】的,而是提高【設(shè)計能力】的作者:暗滅
https://www.zhihu.com/question/23148377/answer/897208445如果你是一個初級程序員,薪水在15k一下,沒有什么你必須掌握的算法,排序可能都不需要。如果你是一個中級程序員,你需要了解的可能包括hash ,md5,des,編輯距離,pagerank,一致性哈希,gossip等一系列各種開源框架中用到的算法。
如果你想成為一個算法工程師,你可能需要了解最大熵,決策樹,條件隨機場,神經(jīng)網(wǎng)絡(luò)等一系列機器學(xué)習(xí)的算法。
作者:肖飛
https://www.zhihu.com/question/23148377/answer/1501033108面試無數(shù)回,總結(jié)一下面試中常見的算法問題,講講自己的認識:1.冒泡排序
基本上面試的時候都會讓你手寫一個冒泡排序,而且排序在實際的項目中應(yīng)用的也非常多。并且你得深知冒泡排序的時間復(fù)雜度和空間復(fù)雜度。如果再引申一下,你還需要知道??焖倥判颍雅判?,插入排序。以及各個排序的時間空間復(fù)雜度。2.斐波那契數(shù)列
這種思想在計算機編程領(lǐng)域有很多的應(yīng)用,迭代的優(yōu)點就在于簡單明了,容易用數(shù)學(xué)歸納法解釋。也是考察數(shù)學(xué)思想的一中基礎(chǔ)的算法。一般會讓你用遞歸的方法手寫斐波那契數(shù)列或者楊輝三角形。3.鏈表
主要考察計算機中這種特殊的數(shù)據(jù)結(jié)構(gòu)的理解一般會讓你手寫一個單鏈表,手寫一個雙鏈表;增加些難度,寫一下鏈表的刪除和插入。再問問鏈表的經(jīng)典問題,判斷一個鏈表是否有環(huán),鏈表反轉(zhuǎn),合并鏈表等等4.二叉樹
基本上會讓你手寫二叉樹的三種遍歷方法,前序遍歷,中序遍歷,后序遍歷。加點難度會問:找出一個二叉樹的節(jié)點數(shù),求二叉樹的最低深度等等5.圖
數(shù)據(jù)結(jié)構(gòu)中重要的一點如果不是面試算法工程師的話,一般不會問到圖相關(guān)的手寫圖的存儲結(jié)構(gòu),寫出深度遍歷和廣度遍歷的算法。6.隊列和棧
隊列和棧常常會應(yīng)用到消息系統(tǒng),一個是先進先出,一個是后進先出。暫時能想到的就是這么多了,這些都屬于計算機算法的最基礎(chǔ)的思想,如果還想細扣的話,那建議去lintcode刷一下具體的題目。https://www.zhihu.com/question/23148377/answer/782615261一、算法
圖搜索 (廣度優(yōu)先、深度優(yōu)先)深度優(yōu)先特別重要二、數(shù)據(jù)結(jié)構(gòu)下載1:OpenCV-Contrib擴展模塊中文版教程
在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。下載2:Python視覺實戰(zhàn)項目52講在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~