[心得] 图解算法 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