《算法之道》精華 經典算法部分

《算法之道》精華 經典算法部分

  • 本書作者鄒恒明,作者另有一本書《數據結構之弦》,以及《操作系統之哲學原理》都是非常好的書
  • 這本書能夠算得上是深入淺出,文筆非常好。作者加入了非常多自己的思考
  • 本文包含經典算法部分

第十章 排序與次序

  • 插入排序
    • 從無序部分抽取一張插入有序部分
    • 為原地排序。無需占用暫時存儲空間
    • 最優情況下為O(n)。平均O(n^2)
  • 折半插入排序
    • 插入時使用二分查找
  • 歸并排序
    • 分治,從中間分解,分別排序后進行細致的合并
    • 異地排序,須要占用額外空間
    • n>=30時性能比插入排序更好。

      復雜度固定為O(nlog(n))

  • 快排
    • 分治,復雜的部分在于分解。而歸并復雜在于合并
    • 原地排序
    • 最壞情況為O(n^2),但僅僅要不是每次都是最壞,復雜度就不是n^2,具有韌性
  • 不論什么基于比較的排序,決策樹高度至少為nlog(n)
  • 計數排序
    • 元素值范圍必須有限
    • 空間復雜度高
    • O(n)
  • 基數排序
    • 從最低位到最高位排序,每一位排序都採用穩定排序,如計數排序
    • 一位排序應該選擇log(n)個比特。使總體成本最低
  • 桶排序
    • 把n元素按值分到n個桶里,每一個桶內部進行插入排序。將各桶首位相連
    • 元素應該是均勻分布
  • 高速次序選擇:求第K大的數
    • 使用快排的partition
    • 最差O(n^2)。平均O(n)
  • 線性最差高速次序選擇
    • 將元素每5個一組。分別取中值。在n/5個中值里面找到中值,作為partition的pivot
    • 為什么*不每3個一組?
    • 保證pivot左邊右邊至少3n/10個元素
    • 最差O(n)

第十一章 搜索與散列

  • 順序搜索
    • 在序列里面假設搜索頻率從頭到尾指數遞減。則為O(1)
  • 折半搜索
    • 對于有序序列,為O(logn)
  • 常數搜索:散列搜索
    • 直接散列:很easy,不會發生碰撞,空間浪費大
    • 除法(模除法)散列
      • 元素對散列表大小m取模得到
      • m必須為素數,否則造成不均勻散射。比方m包括因子d,而大部分元素對d余數相等
      • m不能靠近2的冪。如m為2的冪,散列結果將不依賴元素的全部位。靠近也不行,為什么
    • 乘法散列
      • h(k) = (A * k ) % 2^r >> (w - r)。w為計算機字寬,A為2^(w-1)與2^w之間的一個奇數
      • 乘方取中法:乘方n次(常取n=2),取中間r位
  • 開放尋址散列:散列碰撞時縱深擴展,加入一個鏈表
    • 平均搜索時間為O(1+a),a為載入因子
  • 封閉尋址散列:散列碰撞時為元素找到還有一個位置
    • 找還有一個位置的操作稱為探尋
    • 線性探尋
      • h(k,i) = (h'(k) + i) % m,h'(k)為家位
      • 向單方向尋找未被占用的位置
      • 易出現頂級聚集
    • 非線性探尋
      • 平方探尋?h(k,i) = (h'(k) + c1 * i + c2 * i^2) % m?易出現次級聚集
    • 雙重散列探尋
      • 使用兩個散列函數h1、h2來構造新散列函數
      • h(k,i) = (h1(k) + i * h2(k) ) mod m
    • 偽隨機探尋
      • 使用偽隨機序列
      • 存在次級聚集
    • 不成功搜索的探尋次數期望為1/(1-a)
    • 成功搜索探尋次數最多為1 / a * ln( 1/(1-a))
    • 封閉散列不能刪除元素。能夠放標記解決。假設插入相比搜索很稀疏,則能夠通過又一次散列解決空位問題
  • 隨機化散列
    • 找到一組散列函數。每次隨機選擇一個不同的散列函數
    • 用于避免單個散列函數極端情況下聚集效應嚴重
    • 全域散列
      • 一組H個散列函數,將隨意兩個不同的元素映射到同一位置的函數個數為H/m
  • 完美散列
    • n個元素。構造m=O(n)大小的散列表,使搜索最壞達到O(1)
    • 採用雙層散列,第一層大小n,第二層每一個表的大小為落到第一層位置i上的元素個數的平方
    • 空間消耗為O(n)

第十二章 最短路徑

  • 假設圖中有負環,則不存在最短路徑
  • 單源多點最短路徑
    • Dijkstra算法
      • 貪婪算法。要求不存在負路徑
      • 最優子結構:最短路徑里的每一段都是兩點之間的最短路徑
      • 貪婪選擇屬性:路徑向外延伸的下一個節點就是離源點近期的節點
      • 每次選取離源點近期的節點,更新全部與此節點相鄰節點的距離
      • 時間復雜度為O(V^2)。採用堆實現。能夠達到O(E log(V))。

        與Prim算法同樣

    • Bellman-Ford算法
      • 能夠應對負權重
      • 進行V-1輪降距,每次更新圖中全部邊
      • 復雜度為O(VE)
    • BFS
      • 各邊權重相等的情況
      • O(V+E)
  • 多源多點最短路徑
    • Floyd-Warshall算法
      • 動態規劃算法
      • 子問題為從i到j,中間結點僅僅屬于集合1...k的最短路徑長度
      • c_ijk = min{c_ij(k-1), c_ik(k-1) + ckj(k-1)}|k
      • 復雜度O(n^3)
    • Jonhson算法
      • 等效變換為無負權重的圖,使用Dijkstra算法
      • 加入一個節點s,到全部點路徑長度為0,執行Bellman-Ford算法,對節點賦值
      • 對每一個節點執行Dijkstra算法
      • 復雜度主要是Dijkstra算法運算,為O(VE + V^2 log(V))
      • 若Bellman-Ford算法報告有負環存在,不能使用此方法

  
  

轉載請注明作者:Focustc,博客地址為http://blog.csdn.net/caozhk,原文鏈接為點擊打開

  
  

轉載于:https://www.cnblogs.com/gavanwanggw/p/7259274.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257876.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學生社團網站html,學生社團活動平臺的設計與實現.docx

PAGE 67學生社團活動平臺的設計與實現摘 要本系統立足于實現社團活動申請與審批、資源申請與審批等工作,面向高校中所有的社團,建立一個使用便捷、可靠的社團活動平臺,從而更方便地進行社團活動的申請、社團資源的申請及相應審批,…

tornado 學習筆記17 HTTPServerRequest分析

代表Http請求。 所有的屬性都是字符串型。 17.1 屬性 (1) method:請求方法類型,比如”GET”、”POST” (2) uri: 請求的uri (3) path:請求路徑,作為uri的一部分。 (4) query:查詢字符串:作為uri的一部分。 (5) version&#xff1a…

Android 動畫效果及Interpolator和AnimationListener的使用

轉載http://www.itzhai.com/android-animation-used-to-achieve-control-of-animation-effects-and-use-of-interpolator-and-animationlistener.htmlandroid:interpolator可能有很多人不理解它的用法,文檔里說的也不太清楚,其實很簡單,看下面…

html怎么使圖片無法另存為,如何禁止圖片另存為?禁止網頁另存為到本地的方法...

在很多企事業單位,處于商業機密保護的需要,常常需要禁止一些文件格式的“另存為”功能,防止通過“另存為”將文件另行保存,據為己有的目的;尤其是在局域網中訪問服務器共享文件的時候,常常需要禁止將共享文…

正益工場為京西創客工場輸送雙創“軟”實力

12月30日,中關村門頭溝科技園“京西創客工場”正式揭牌,這里將成為京西“生態科創”的聚集地。正益工場作為唯一入駐的“移動互聯網”雙創生態平臺,將為雙創輸送“移動技術移動模式”等軟實力。北京市副市長隋振江、市政協、中關村管委會等領…

【動態規劃】【線段樹】 Codeforces Round #426 (Div. 1) B. The Bakery

給你一個序列,讓你劃分成K段,每段的價值是其內部權值的種類數,讓你最大化所有段的價值之和。 裸dp f(i,j)max{f(k,j-1)w(k1,i)}&#…

幾種服務器端IO模型的簡單介紹及實現(轉載)

作者:阿凡盧 出處:http://www.cnblogs.com/luxiaoxun/服務器端幾種模型: 1、阻塞式模型(blocking IO) 我們第一次接觸到的網絡編程都是從 listen()、accpet()、send()、recv() 等接口開始的。使用這些接口可以很方便的…

html細邊框表格代碼,html中表格細邊框的四種實現及其比較.doc

html中表格細邊框的四種實現及其比較?html中表格細邊框的四種實現及其比較第一種使用css!--- 華麗的分隔線。。 -- .box ?border-top-width: 1px;?border-right-width: 0px;?border-bottom-width: 0px;?border-left-width: 1px;?border-top-style: solid;?border-right-…

margin 等高布局

<div id"main"><div id"left">我是左邊的內容的啦啦啦啦。。。。<br> 我是左邊的內容的啦啦啦啦。。。。<br> 我是左邊的內容的啦啦啦啦。。。。<br> 我是左邊的內容的啦啦啦啦。。。。<br> 我是左邊的內容的啦啦啦啦…

c、c++---linux上的GetTickCount函數

http://blog.csdn.net/guang11cheng/article/details/6865992 http://wenda.so.com/q/1378766306062794

C#判斷一個類中有無指定名稱的方法

C#中可以通過反射分析元數據來解決這個問題&#xff0c;示例代碼如下&#xff1a;12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System;using System.Reflection;namespace Hello{class Program{static void Main(string[…

2021年高考成績查詢襄陽狀元,大膽猜測一下,2021年高考,湖北省文理狀元會花落誰家?...

隨著2021年高考的逼近&#xff0c;考生進入緊張有序的復習中&#xff0c;家長也在為孩子籌謀著哪所學校更適合&#xff0c;作為吃瓜群眾的我們&#xff0c;可能更關注今年湖北省的文理科狀元會花落誰家&#xff0c;要知道&#xff0c;一所學校如果可以出現一名高考狀元&#xf…

為什么寫Java程序需要接口

為什么寫Java程序需要接口 我之所以以這個作為標題&#xff0c;并不是為了玩噱頭&#xff0c;講一些似是而非的空話&#xff0c;還是以探索加發現&#xff0c; 追本溯源的講解一下為什么Java需要接口&#xff0c;怎么理解&#xff0c;怎么用它。 首先接口并不是Java才有的&…

《領域特定語言》一1.5使用代碼生成

1.5使用代碼生成 在迄今為止的討論中&#xff0c;要處理DSL&#xff0c;組裝“語義模型”&#xff08;第11章&#xff09;&#xff0c;然后執行語義模型&#xff0c;提供我們希望從控制器得到的行為。在語言圈子里&#xff0c;這種方式稱為解釋&#xff08;interpretation&…

SVG 基礎圖形

SVG 基礎圖形 SVG包含了以下的基礎圖形元素&#xff1a; 矩形&#xff08;包括可選的圓角&#xff09;&#xff0c;使用<rect>元素創建圓形&#xff0c;使用<circle>元素創建橢圓形&#xff0c;使用<ellipse>元素創建直線&#xff0c;使用<line>元素創…

棗莊三中高考2021成績查詢,2021棗莊中考成績查詢系統入口

2021棗莊中考成績查詢系統入口2021-05-20 19:11:35文/王佳慧2021年&#xff0c;棗莊的中考時間快到了&#xff0c;本文分享了棗莊中考成績查詢入口&#xff0c;系統開通后考生可登陸查詢成績。棗莊中考成績查詢入口志愿填報須知1.錄取標準&#xff1a;提前批、第一批、第三批學…

移動端”宴席知多少

轉載(http://adt.aicai.com/index.php/archives/179/) 瞎折騰移動端的項目已經很長一段時間了&#xff0c;并不像其它企業一樣&#xff0c;可以有項目組去完成&#xff0c;基本都是一個人瞎嘗試&#xff0c;時而web&#xff0c;時而web app。恍恍惚惚過了這段歲月&#xff0c;也…

快速的取整方法(~~)

為什么80%的碼農都做不了架構師&#xff1f;>>> 最近看一篇js裝逼小技巧————雙波浪號的妙用(將內容轉化為數字,或者小數取整)&#xff0c;但是本身我的JavaScript水平比較低對其底層操作和其使用范圍不甚了解&#xff1b;通過翻閱資料現進行簡單的整理。 ###裝…

git log友好顯示

查看commit 提交日志 $ git log $git log --prettyoneline $git reflog 顯示所有提交記錄&#xff0c;包括已經回退的提交&#xff0c;如圖&#xff1a;提交了abc 和 bb 然后回退到 abc   $git log 只顯示abc提交 可以使用 $git reset --hard commit號 回退到bb git reflog…

jprofiler_windows-x64_9_1注冊碼

L-Larry_Lau163.com#5481-ucjn4a16rvd98#6038 L-Larry_Lau163.com#36573-fdkscp15axjj6#25257 轉載于:https://www.cnblogs.com/sprinng/p/5104507.html