![程序員必須知道的10大基礎實用算法及其講解_第1頁](http://file4.renrendoc.com/view/9d1df681263487a1828a4826d9ea9128/9d1df681263487a1828a4826d9ea91281.gif)
![程序員必須知道的10大基礎實用算法及其講解_第2頁](http://file4.renrendoc.com/view/9d1df681263487a1828a4826d9ea9128/9d1df681263487a1828a4826d9ea91282.gif)
![程序員必須知道的10大基礎實用算法及其講解_第3頁](http://file4.renrendoc.com/view/9d1df681263487a1828a4826d9ea9128/9d1df681263487a1828a4826d9ea91283.gif)
![程序員必須知道的10大基礎實用算法及其講解_第4頁](http://file4.renrendoc.com/view/9d1df681263487a1828a4826d9ea9128/9d1df681263487a1828a4826d9ea91284.gif)
![程序員必須知道的10大基礎實用算法及其講解_第5頁](http://file4.renrendoc.com/view/9d1df681263487a1828a4826d9ea9128/9d1df681263487a1828a4826d9ea91285.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、算法一:快速排序算法1=1=快速排序是由東尼霍爾所發(fā)展的一種排序算法。在平均狀況下,排序n個 項目要0 (n log n)次比較。在最壞狀況下則需要0 (n2)次比較,但這種狀況 并不常見。事實上,快速排序通常明顯比其他0 (n log n)算法更快,因為它 的內(nèi)部循環(huán)(inner loop)可以在大部分的架構上很 有效率地被實現(xiàn)出來??焖倥判蚴褂梅种畏?Divide and conquer)策略來把一個串行(list)分 為兩個子串行(sub-lists)。算法步驟:1從數(shù)列中挑出一個元素,稱為“基準”(pivot),2重新排序數(shù)列,所有元素比基準值小的擺放在基準前面,所有元素比基準 值大的
2、擺在基準的后面(相同的數(shù)可以到任一邊)。在這個分區(qū)退出之后,該基 準就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作。3遞歸地(recursive)把小于基準值元素的子數(shù)列和大于基準值元素的子 數(shù)列排序。遞歸的最底部情形,是數(shù)列的大小是零或一,也就是永遠都已經(jīng)被排序好了。 雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration) 中,它至少會把一個元素擺到它最后的位置去。詳細介紹:快速排序算法二:堆排序算法1=1=算法二:堆排序算法1=1=堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構所設計的一種排序算法。堆積 是一個近似完全二叉樹的結(jié)構,并同時滿足堆積的性
3、質(zhì):即子結(jié)點的鍵值或索引 總是小于(或者大于)它的父節(jié)點。堆排序的平均時間復雜度為O (nlogn)。算法步驟:創(chuàng)建一個堆H0.n-1把堆首(最大值)和堆尾互換把堆的尺寸縮小1,并調(diào)用shift_down(0),目的是把新的數(shù)組頂端數(shù)據(jù) 調(diào)整到相應位置重復步驟2,直到堆的尺寸為1詳細介紹:堆排序算法三:歸并排序1=詳細介紹:堆排序算法三:歸并排序1=歸并排序(Merge sort,臺灣譯作:合并排序)是建立在歸并操作上的一種 有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型 的應用。算法步驟:申請空間,使其大小為兩個已經(jīng)排序序列之和,該空間用來存放合并后
4、 的序列設定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移 動指針到下一位置重復步驟3直到某一指針達到序列尾5.將另一序列剩下的所有元素直接復制到合并序列尾詳細介紹:歸并排序算法四:二分查找算法1=5.將另一序列剩下的所有元素直接復制到合并序列尾詳細介紹:歸并排序算法四:二分查找算法1=1=二分查找算法是一種在有序數(shù)組中查找某一特定元素的搜索算法。搜素過程 從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結(jié)束; 如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那 一半中查找,而且跟開始一樣從中間
5、元素開始比較。如果在某一步驟數(shù)組為空, 則代表找不到0。這種搜索算法每一次比較都使搜索范圍縮小一半。折半搜索每 次把搜索區(qū)域減少一半,時間復雜度為O (logn)。詳細介紹:二分查找算法算法五:BFPRT(線性查找算法)算法五:BFPRT(線性查找算法)r=岸BFPRT算法解決的問題十分經(jīng)典,即從某n個元素的序列中選出第k大(第 k?。┑脑?,通過巧妙的分析,BFPRT可以保證在最壞情況下仍為線性時間復 雜度。該算法的思想與快速排序思想相似,當然,為使得算法在最壞情況下,依 然能達到o(n)的時間復雜度,五位算法作者做了精妙的處理。算法步驟:將n個元素每5個一組,分成n/5(上界)組。取出每一
6、組的中位數(shù),任意排序方法,比如插入排序。遞歸的調(diào)用selection算法查找上一步中所有中位數(shù)的中位數(shù),設為x, 偶數(shù)個中位數(shù)的情況下設定為選取中間小的一個。4.5.若ik用X來分割數(shù)組,設小于等于x的個數(shù)為k,大于x4.5.若ik若i=k,返回X;若ik,在小于X的元素中遞歸查找第i小的元素; 在大于X的元素中遞歸查找第i-k小的元素。終止條件:n=1時,返回的即是i小元素。算法六:DFS (深度優(yōu)先搜索)算法六:DFS (深度優(yōu)先搜索)r=深度優(yōu)先搜索算法(Depth-First-Search),是搜索算法的一種。它沿著樹 的深度遍歷樹的節(jié)點,盡可能深的搜索樹的分支。當節(jié)點v的所有邊都己被
7、探 尋過,搜索將回溯到發(fā)現(xiàn)節(jié)點v的那條邊的起始節(jié)點。這一過程一直進行到已發(fā) 現(xiàn)從源節(jié)點可達的所有節(jié)點為止。如果還存在未被發(fā)現(xiàn)的節(jié)點,則選擇 其中一 個作為源節(jié)點并重復以上過程,整個進程反復進行直到所有節(jié)點都被訪問為止。 DFS屬于盲目搜索。深度優(yōu)先搜索是圖論中的經(jīng)典算法,利用深度優(yōu)先搜索算法可以產(chǎn)生目標圖 的相應拓撲排序表,利用拓撲排序表可以方便的解決很多相關的圖論問題,如最 大路徑問題等等。一般用堆數(shù)據(jù)結(jié)構來輔助實現(xiàn)DFS算法。深度優(yōu)先遍歷圖算法步驟:訪問頂點v;依次從v的未被訪問的鄰接點出發(fā),對圖進行深度優(yōu)先遍歷;直至圖中 和v有路徑相通的頂點都被訪問;若此時圖中尚有頂點未被訪問,則從一個
8、未被訪問的頂點出發(fā),重新進 行深度優(yōu)先遍歷,直到圖中所有頂點均被訪問過為止。上述描述可能比較抽象,舉個實例:DFS在訪問圖中某一起始頂點v后,由v出發(fā),訪問它的任一鄰接頂點w1; 再從w1出發(fā),訪問與w1鄰 接但還沒有訪問過的頂點w2;然后再從w2出 發(fā),進行類似的訪問,如此進行下去,直至到達所有的鄰接頂點都被訪問過 的頂點u為止。接著,退回一步,退到前一次剛訪問過的頂點,看是否還有其它沒有被訪問 的鄰接頂點。如果有,則訪問此頂點,之后再從此頂點出發(fā),進行與前述類似的訪問;如果沒有,就再退回一步進行搜索。重復上述過程,直到連通圖中所有頂 點都被訪問過為止。詳細介紹:深度優(yōu)先搜索算法七:BFS
9、算法七:BFS (廣度優(yōu)先搜索)r=廣度優(yōu)先搜索算法(Breadth-First-Search),是一種圖形搜索算法。簡單 的說,BFS是從根節(jié)點開始,沿著樹(圖)的寬度遍歷樹(圖)的節(jié)點。如果所有節(jié) 點均被訪問,則算法中止。BFS同樣屬于盲目搜索。一般用隊列數(shù)據(jù)結(jié)構來輔助 實現(xiàn)BFS算法。算法步驟:首先將根節(jié)點放入隊列中。從隊列中取出第一個節(jié)點,并檢驗它是否為目標。如果找到目標,則結(jié)束搜尋并回傳結(jié)果。否則將它所有尚未檢驗過的直接子節(jié)點加入隊列中。若隊列為空,表示整張圖都檢查過了亦即圖中沒有欲搜尋的目標。 結(jié)束搜尋并回傳“找不到目標”。重復步驟2。匚Cp CD QO詳細介紹:廣度優(yōu)先搜索算法八
10、:Dijkstra算法算法八:Dijkstra算法r=r=戴克斯特拉算法(Dijkstras algorithm)是由荷蘭計算機科學家艾茲赫 爾戴克斯特拉提出。迪科斯徹算法使用了廣度優(yōu)先搜索解決非負權有向圖的單 源最短路徑問題,算法最終得到一個最短路徑樹。該算法常用于路由算法或者作 為其他圖算法的一個子模塊。該算法的輸入包含了一個有權重的有向圖G,以及G中的一個來源頂點S。 我們以V表示G中所有頂點的集合。每一個圖中的邊,都是兩個頂點所 形成 的有序元素對。(u, v)表示從頂點u到v有路徑相連。我們以E表示G中所 有邊的集合,而邊的權重則由權重函 數(shù)w: E 一 0, 8定義。因此, w(u
11、, v)就是從頂點u到頂點v的非負權重(weight)。邊的權重可以想像成 兩個頂點之間的距離。任兩點間路徑的權重,就是該路徑上所有邊的權重總和。 已知有V中有頂點s及t,Dijkstra算法可以找到s到t的最低權 重路徑 (例如,最短路徑)。這個算法也可以在一個圖中,找到從一個頂點s到任何其 他頂點的最短路徑。對于不含負權的有向圖,Dijkstra算法是目前已知的最快 的單源最短路徑算法。算法步驟:初始時令S=V0,T=其余頂點,T中頂點對應的距離值若存在V0,Vi,d(V0,Vi)為V0,Vi孤上的權值若不存在V0,Vi,d(V0,Vi)為 8從T中選取一個其距離值為最小的頂點W且不在S中
12、,加入S對其余T中頂點的距離值進行修改:若加進W作中間頂點,從V0到Vi 的距離值縮短,則修改此距離值重復上述步驟2、3,直到S中包含所有頂點,即W=Vi為止詳細:Dijkstra 算法算法九:動態(tài)規(guī)劃算法1=詳細:Dijkstra 算法算法九:動態(tài)規(guī)劃算法1=1=動態(tài)規(guī)劃(Dynamic programming)是一種在數(shù)學、計算機科學和經(jīng)濟學中 使用的,通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。動態(tài)規(guī)劃常常適用于有重疊子問題和最優(yōu)子結(jié)構性質(zhì)的問題,動態(tài)規(guī)劃方法所耗時 間往往遠少于樸素解法。動態(tài)規(guī)劃背后的基本思想非常簡單。大致上,若要解一個給定問題,我們需 要解其不同部分(
13、即子問題),再合并子問題的解以得出原問題的解。通常許 多子問題非常相似,為此動態(tài)規(guī)劃法試圖僅僅解決每個子問題一次,從而減少 計算量:一旦某個給定子問題的解已經(jīng)算出,則將其記憶化存儲,以便下次需 要同一個子問題解之時直接查表。這種做法在重復子問題的數(shù)目關于輸入的規(guī) 模呈指數(shù)增長時特別有用。關于動態(tài)規(guī)劃最經(jīng)典的問題當屬背包問題。算法步驟:1.最優(yōu)子結(jié)構性質(zhì)。如果問題的最優(yōu)解所包含的子問題的解也是最優(yōu)的, 我們就稱該問題具有最優(yōu)子結(jié)構性質(zhì)(即滿足最優(yōu)化原理)。最優(yōu)子結(jié)構性質(zhì)為 動態(tài)規(guī)劃算法解決問題提供了重要線索。2.子問題重疊性質(zhì)。子問題重疊性質(zhì)是指在用遞歸算法自頂向下對問題進 行求解時,每次產(chǎn)生的子問題并不總是新問題,有些子問題會被重復計算多次。 動 態(tài)規(guī)劃算法正是利用了這種子問題的重疊性質(zhì),對每一個子問題只計算一次, 然后將其計算結(jié)果保存在一個表格中,當再次需要計算已經(jīng)計算過的子問題時, 只是在表格中簡單地查看一下結(jié)果,從而獲得較高的效率。詳細參考:從全球?qū)Ш降捷斎敕ǎ赫務剟討B(tài)規(guī)劃動態(tài)規(guī)劃算法十:樸素貝葉斯分類算法樸素貝葉斯分類算法是一種基于貝葉斯定理的簡單概率分類算法。貝葉斯分 類的基礎是概率推理,就是在各種條件的存在不確定,僅知其出現(xiàn)概率的情況下, 如何完成推理和決策任務。概率推理是與確定性推理相對應的。而樸素
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公司年會領導發(fā)言稿范文(17篇)
- 2024-2025學年廣東省梅州市平遠縣實驗中學高三上學期9月月考歷史試卷
- 2024-2025學年第17課挽救民族危亡的斗爭-勤徑學升高中歷史必修上同步練測(統(tǒng)編版2019)
- 2025年以車抵押還款協(xié)議書范本
- 2025年個人項目委托合同
- 2025年臨時展覽館場地租賃合同范文
- 2025年涂料助劑:流平劑項目申請報告模范
- 2025年企業(yè)會議設備租賃合同范本
- 2025年個人與團隊共同成長策劃協(xié)議
- 2025年全場景住宅交易居間合同模板
- 2023六年級數(shù)學下冊 第2單元 百分數(shù)(二)綜合與實踐 生活與百分數(shù)說課稿 新人教版
- 2025年1月浙江省高考政治試卷(含答案)
- 教體局校車安全管理培訓
- 湖北省十堰市城區(qū)2024-2025學年九年級上學期期末質(zhì)量檢測綜合物理試題(含答案)
- 行車起重作業(yè)風險分析及管控措施
- 健康體檢中心患者身份登記制度
- 《災害的概述》課件
- 2025年上半年重慶三峽融資擔保集團股份限公司招聘6人高頻重點提升(共500題)附帶答案詳解
- 大模型關鍵技術與應用
- DZ∕T 0227-2010 地質(zhì)巖心鉆探規(guī)程(正式版)
- 20以內(nèi)加減法口算題(10000道)(A4直接打印-每頁100題)
評論
0/150
提交評論