20162308 2017-2018-2 《程序設計與數據結構》第二週學習總結

20162308 2017-2018-2 《程序設計與數據結構》第二週學習總結

教材學習內容總結

  • 本週學習了教材第十三章"查找與排序"的內容
  1. 查找算法
    查找算法,一般來講,分爲遍歷(線性)和二分,算法複雜度分別爲O(n)和O((1/2)^n),二分查找一般是在有序的數據集中進行,即便是在極大的數據規模下,也可以保證至關快的速度。線性的遍歷查找,在最壞狀況下,須要遍歷數據集中的每一個元素,一旦數據規模變大,計算速度就會下降。

想象這樣一種狀況,咱們設計了一個網絡爬蟲,咱們爬到了幾十億(甚至幾百億)個url,爲了加快爬取的速度,對於相同的url,咱們的爬蟲將再也不進行重複下載。這時候,如何快速在由數十億個元素組成的集合中快速發現是否有重複的元素?布隆提出了一種複雜度爲O(1)的查找算法——Bloom Filter。html

布隆過濾器(英語:Bloom Filter)是1970年由布隆提出的。它其實是一個很長的二進制向量和一系列隨機映射函數。布隆過濾器能夠用於檢索一個元素是否在一個集合中。它的優勢是空間效率和查詢時間都遠遠超過通常的算法,缺點是有必定的誤識別率和刪除困難。git

雖然存在必定的偏差,可是在大規模應用的狀況下,布隆過濾器,經過HASH和創建二進制向量,可以很是出色地完成一些工做,在暑假,我和同窗進一步拓展了布隆的工做,將其實現了Bloom Filter的分佈式部署。算法

  1. 排序算法
    教材中介紹了冒泡、快速、歸併、選擇等常見的排序算法,從原理上說選擇排序、插入排序和冒泡排序都相差不大,都是用了兩次循環,只是在第二重循環的具體實現上有一些區別。比較有意思的仍是Quick Sort算法,可是婁老師在課上已經講的很清楚了,這幾天在知乎上看到一篇文章挺有意思,在博客中分享。https://zhuanlan.zhihu.com/p/22150349

下載.png

做者在文章中從信息論角度討論了排序算法時間複雜度的下限,角度仍是挺新奇的,尤爲是見到熟悉的交叉熵,除了用在神經網絡算法裏面,信息論還能用來計算算法複雜度。而後做者還介紹了一種來自Concrete Math特別酷炫的計算快速排序算法複雜度的方法,我渾淪吞棗的看完了,思路確實是很是精彩。
FireShot Capture 57 - 快速排序(Quick Sort)詳解 - 知乎專欄 - https___zhuanlan.zhihu.com_p_22150349.png網絡

教材學習中的問題和解決過程

沒有問題。數據結構

代碼調試中的問題和解決過程

沒有問題。分佈式

代碼託管

  • 代碼提交過程 & 代碼量截圖:
  • 2017-04-30.png

結對及互評

點評模板:

  • 博客中值得學習的或問題:

其餘

這周過的很倉促,連着幾天熬夜,很大部分的時間都用來忙校慶了。由於全身心地獻給祖國獻給黨,因此學習上就無法兼顧,包括請了一節程序設計課的假。但願下週開始好好學習,fighting💪函數

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 - 1 10
第一週 - 2 20
  • 計劃學習時間:20小時學習

  • 實際學習時間:10小時ui

  • 改進狀況:url

參考資料

相關文章
相關標籤/搜索