[心得] 圖解演算法 Hash Search使用優勢與時機

作者: uopsdod (pcman)   2020-11-26 20:10:06
【圖解演算法教學】
還在用古老的二元搜尋法?是時候跟上「Hash Search」 的車尾燈了!
封面圖:https://imgur.com/8GfYiTO
架構圖:https://imgur.com/SbC5IKY
在我們還沒學資料結構前,通常都用Linear Search找東西。
之後,我們學了二元樹,開始利用二元搜尋法,大幅提升搜尋效能。
然而,在演算法的世界中:
還有比Binary Search還快的東西,即是這次要介紹的「Hash Search」!
影片連結:https://bit.ly/2Uv2sBf
考量有人習慣文章閱讀,這邊也直接幫大家整理出重要內容:
Linear Search : BigO(n)
Binary Search : BigO(n) ~ BigO(log(n))
Hash Search : BigO(n) ~ BigO(1)
可以看到,在最佳狀況下,Hash Search的效率是最快的,一步到位。
而之所以可以做到這樣的效能,是因為Hash Seach是by Index的搜尋方式。
比如說將 29 這個數字 經過hash之後:
9 = hash(29)
就能拿到 index 9 ,我們只要去查 array[9] == 29 是否正確,就能拿到結果。
當然,現實上沒這麼理想,會遇到「碰撞」,也就是不同來源數字hash到同一個index
這部分將在後續實作中介紹,這次主要是幫大家抓到使用「Hash Search」的誘因。
最後補充,Binary Search由於會先將資料排序,所以更適合用在「範圍搜尋」。
以上內容為影片重點萃取,有需要可以進一步參考影片完整介紹,
希望能多少幫到初學與需要複習的人!
作者: qq3615 (qq3615)   2020-11-27 02:52:00
binary search應該可以保證最壞log(n)?
作者: jobintan (Robin Artemstein)   2020-11-27 08:00:00
推個先,hash感覺像是用index找array的感覺。
作者: b0920075 (Void)   2020-11-27 10:45:00
他的二元樹是線性時間應該是指二元樹退化成鏈表的情況吧,畢竟他也沒說是平衡二元樹
作者: zo6596001 (超帥肥宅)   2020-11-27 13:01:00
很多語言都有內建這個,常見的就是dictionary或是c++的unordered_map
作者: ucrxzero (RX-0)   2020-11-27 13:43:00
請問怎麼實作universal hash
作者: ericerix (Ponwar)   2020-11-27 15:25:00
Binary search先排序,但排序過程最快nlogn,會優於linear嗎?除非之後還要找其他值才會快一些吧?
作者: annheilong (方格子)   2020-11-27 16:18:00
我覺得也可以提供「加入」的時間複雜度
作者: leo08210917 (leo)   2020-11-28 01:36:00
樓樓上 這邊純講搜尋吧
作者: gsrr (下五子棋)   2020-11-28 23:12:00
無聊

Links booklink

Contact Us: admin [ a t ] ucptt.com