別人的《演算法圖解》筆記+自己的一些思考
前言:
這個筆記我大致瀏覽了一下 非常簡略 但是有一些非常好的觀察。也給出了不少需要注意的點。
正文:
- 僅當列表是有序的 二分查詢才有效,但是要注意順序是不是重要,如果重要我們才能預排序。而且要注意有時候反過來想:有時候我們需要查詢一些東西,而且是順序並不重要 這個時候我們要想起來用二分查詢進行優化,而不是題目提示你用二分查詢你才想起來。
- 每個遞迴函式都有兩部分,基線條件(base case) 和 遞迴條件(recursive case)。遞迴條件指的是函式呼叫自己,基線條件指的是函式不再呼叫自己,從而避免形成無限迴圈。
- 優化遞迴的呼叫棧,有2種方法
重新編寫程式碼,轉而使用迴圈
使用尾遞迴。這是一個高階的主題,不在本書的討論範圍內,另外,並非所有的語言都支援尾遞迴。 - 雜湊表要避免衝突,需要有: better hashing function(當前最安全的密碼雜湊函式是 bcrypt,但沒有任何東西是萬無一失的。) and low loading factor.
- 在無向圖中,每條邊都是一個環。迪傑斯特拉演算法只能用於有向無環圖(directed acyclic graph, DAG),如果有負權邊,就不能使用迪傑斯特拉演算法。
- 在有負權邊的圖中,要求最短路徑,需要用到貝爾曼-福德演算法(Bellman-Ford algorithm)
- 判斷是否是 NP 完全問題
元素較少時演算法的執行速度非常快,但隨著元素數量的增加,速度會變得非常慢。
涉及“所有組合”的問題通常是 NP 完全問題。
不能將問題分成小問題,必須考慮各種可能的情況。這可能是 NP 完全問題。
如果問題涉及序列,(如旅行商問題中的城市序列)且難以解決,它可能就是 NP 完全問題。
如果問題涉及集合(如廣播臺集合),且難以解決,它可能就是 NP 完全問題。
如果問題可轉換為集合覆蓋問題或旅行商問題,那它肯定是 NP 完全問題。 - NP完全問題目前沒有辦法直接找到最優解 只能用近似演算法或者啟發式演算法。
- 沒有放之四海皆準的計算動態規劃的公式,動態規劃是一門藝術。
- Fun fact: git diff 命令指出兩個檔案的差異,使用的就是動態規劃實現的。
- 布隆過濾器是一個概率型資料結構,它提供的答案有可能不對,但很可能是正確的。可能出現錯報的情況,但是不可能出現漏報的情況。布隆過濾器非常適合用於不要求答案絕對準確的情況。面臨海量資料且只要求答案八九不離十時,可考慮使用概率型演算法。
- SHA 雜湊函式是區域性不敏感的,有一個字元變化,都會導致其雜湊值截然不同。有時候希望雜湊函式是區域性敏感的。在這種情況下,可使用 Simhash。如果你對字串做細微的修改,Simhash 生成的雜湊值也只存在細微的差別。這讓你能夠通過比較雜湊值來判斷兩個字串的相似程度。需要檢查兩項內容的相似程式時,Simhash 很有用。
Google 使用 Simhash 來判斷網頁是否已蒐集。
老師可以使用 Simhash 來判斷學生的論文是否是從網上抄的。
Scribd 允許使用者上傳文件或圖書,以便與人分享,但不希望使用者上傳有版權的內容。這個網站可使用 Simhash 來檢查上傳的內容是否與出版的小說類似,如果類似,就自動拒絕。
相關文章
- 《演算法圖解》筆記演算法圖解筆記
- 對自己目前狀況的一些思考
- 【資料結構與演算法筆記04】對圖搜尋策略的一些思考(包括DFS和BFS)資料結構演算法筆記
- 《演算法圖解》讀書筆記演算法圖解筆記
- 演算法圖解讀書筆記演算法圖解筆記
- 【演算法】演算法圖解筆記_快速排序演算法圖解筆記排序
- 關於尋路演算法的一些思考(7):地圖表示演算法地圖
- 讀天才與演算法:人腦與AI的數學思維筆記11_演算法如何思考演算法AI筆記
- cookie與session的自己思考與解釋CookieSession
- 《演算法圖解》作者Adit Bhargava:插圖筆記法解除演算法的魔咒(圖靈訪談)演算法圖解筆記圖靈
- switch的一些思考(seitch與ifelse的區別)
- 關於Vue和React區別的一些筆記VueReact筆記
- 六月,允許自己做自己,別人做別人
- 《圖解http》筆記圖解HTTP筆記
- 《思考致富》筆記筆記
- 《演算法圖解》讀書筆記—像小說一樣有趣的演算法入門書演算法圖解筆記
- JavaScript學習筆記 - 值的型別的一些知識點JavaScript筆記型別
- addEventListener(自己的學習筆記)dev筆記
- 拖放事件(自己的學習筆記)事件筆記
- 圖靈技術演算法群第1期:《演算法圖解》讀書筆記圖靈演算法圖解筆記
- 圖靈社群改版的一些建議和思考圖靈
- 關於尋路演算法的一些思考(4):A* 演算法的變體演算法
- 關於尋路演算法的一些思考(3):A*演算法的實現演算法
- 【演算法圖解】讀書筆記:第3章 遞迴演算法圖解筆記遞迴
- 關於技術人員自身能力提升的一些思考
- 《圖解TCP/IP》筆記圖解TCP筆記
- 讓別人的小程式執行在自己的app中APP
- UI設計師自學記:抄襲別人,超越自己UI
- 生活的一些思考
- 我的一些思考
- 有關AsyncTask的一些隨筆筆記筆記
- Docker筆記2——儲存自己的LNMPDocker筆記LNMP
- 關於http(自己的學習筆記)HTTP筆記
- 如何構建自己的筆記系統?筆記
- 關於尋路演算法的一些思考(1):A*演算法介紹演算法
- 提升自己oracle分析能力一些思考及方法論Oracle
- 不要複製別人的程式碼 自己敲出來!
- 不要因為別人的過錯懲罰自己