算法導論 高頻算法題 數據結構與算法之美

說明

  1. 業務開發工程師,你真的願意做一輩子 CRUD Boy嗎?
  2. 基礎架構研發工程師,寫出達到開源水平的框架纔是你的目標!
  3. 對編程還有追求?不想被行業淘汰?那就不要只會寫湊合能用的代碼!

之前花了1年時間學完《算法導論》,實際上裏面有很多數學公式,微積分,概率,矩陣,和歸納法,學起來確實投入很多時間。知名論壇一畝三分地,推薦《Cracking the Coding Interview》,裏面講算法和麪試技巧. LeetCode算法題做了Facebook的算法,java實現下載swift實現下載

知名算法

1.如何從無序超大的集合裏,比如100億個數字,獲取最大的前100個。

此類問題可以總結爲利用堆求 Top K,都可以用堆來解決。
看到此類題目第一印象是用排序處理,快速排序,時間複雜度爲O(n*logn).
有沒有更好的辦法? 這就是用小頂堆排序,先維護一個大小爲K的小頂堆,排序,接着逐個從超大數據集中取出單個數據,跟小頂堆的最頂數據比較,如果大於最頂的數據,則替換掉對頂的數字,重新排序小頂堆,如果小於則直接跳過。也就是如果最大的數字都在最前面,只要遍歷n個數字,複雜度就是O(n). 一次堆化操作需要O(logK), 平均複雜度爲O(nlogK)。

2.Least Recently Used(LRU)緩存淘汰算法

最近最少使用緩存淘汰算法:實現一個有限緩存功能,當緩存達到閾值的時候,刪掉最不常用的空間,保存新的緩存。
解決方案:維護一個有序單鏈表,越靠近鏈表尾部的結點是越早之前訪問的。當有一個新的數據被訪問時,從鏈表投開始順序遍歷鏈表。

  1. 如果此數據之前已經被緩存在鏈表中了,遍歷得到這個數據對應的結點,並將其從原來的位置刪除,然後再插入到鏈表的頭部。
  2. 如果此數據沒有在緩存鏈表中,又可以分爲兩種情況:
  • 如果此時緩存未滿,則將此結點直接插入到鏈表的頭部;
  • 如果此時緩存已滿,則鏈表尾部結點刪除,將新的數據結點插入到鏈表的頭部。

推薦

數據結構和算法必知必會的50個代碼實現(各種語言實現都有)
https://github.com/wangzheng0822/algo
前Google工程師王爭作品

稀缺課程優惠

吾生有涯,而知無涯。時間是最稀缺的商品,看到《數據結構與算法之美》的專欄還是忍不住學完了,
說實話講得物超所值,把《算法導論》裏的算法都涵蓋了,並超越了,比如跳錶快速查詢;比如搜索引擎怎麼爬蟲,怎麼建立索引,怎麼查詢。講得語言通俗易懂,做好心理準備有些課程還是有難度。前Google工程師王爭作品,牆裂推薦。

通過下面的二維碼,新用戶有30大洋的優惠券,老用戶購買成功直接返現金。
通過下面的二維碼購買,請加筆者微信: zgpeace, 返現3/4。
更多課程,請到鏈接:
https://github.com/zgpeace/geekTimeQrcode/blob/master/README.md
在這裏插入圖片描述

課程目錄
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章