【期外】 (一)关于LSH :局部敏感哈希算法
LSH是我同學(xué)的名字,平時我會親切的稱呼他為離騷,老師好,左移(leftshift),小騷騷之類的,最近他又多了一個新的外號:局部敏感哈希(Locally?sensitive?hashing)。
好了,廢話不多說直接轉(zhuǎn)入正題:
『寫在前面』局部敏感哈希是一種NOIP禁用的算法(因為使用了隨機數(shù)),若不感興趣就無需往下看了。
『什么是LSH?』
?
LSH就是局部敏感哈希,聽著名字就知道和普通的哈希不一樣,具體哪里不一樣,就先吊吊你的胃口,稍后再說。先來了解LSH的各方面性能:
首先先來思考一個問題:
如果給你一堆數(shù)字,然后查找一個數(shù)是否在這堆數(shù)中存在或者找到一個最相似的數(shù)字,你會怎么辦?
Answer:
1)首先,我們一定會想到線性查找,直白的來說,這簡直就是最慢的一種方法,直接用數(shù)組存好后,一個一個來判斷,當(dāng)數(shù)據(jù)規(guī)模小的時候還好,但是,到了規(guī)模很大的時候,比如說有1億個數(shù)據(jù)時,還能在規(guī)定的時間內(nèi)找到嗎?
2)其次,我們會想到二分查找,這種算法運用了分治的思想,將O(n)的時間復(fù)雜度降低到了O(log n)的時間復(fù)雜度,不過還需要排一次序,但是也費不了多少時間,這種方法相對來說是很可觀的,但是有時還滿足不了我們的需求。
3)這種想法也和 2)差不了多少,但是功能更強大,能夠?qū)崿F(xiàn)維護(hù),插入,刪除等一系列操作,沒錯,它就是二叉查找樹,一種用樹結(jié)構(gòu)存儲的方法,但是有時卻很慢,放張圖,細(xì)細(xì)體會吧~
?比如說要查找4,那么就一定會全部遍歷一遍,顯然還是二分查找更快。
4)紅黑樹&其他平衡樹:平衡樹的種類很多,這些樹能有效避免上圖的情況,小編曾寫過一篇紅黑樹博客,想看戳這里,里面也有詳細(xì)的二叉查找樹講解。
5)好用的當(dāng)然在后面——哈希算法,這種算法只要操作一遍數(shù)后,就可以做到O(1)的速度查找,但是問題卻在于如何處理哈希沖突(有關(guān)哈希的講解戳這里),適當(dāng)?shù)膍od正是關(guān)鍵,但是往往我們處理不好這個問題,引起很多問題,比如2000和1000同時對10取模后將都是0,原本差別很大,但是現(xiàn)在沒有了差別;再比如1008和1000對10取模后分別是8和0,原本差別不大,但是現(xiàn)在差別相對變大了很多,因此便請出了局部敏感哈希。
? 局部敏感哈希最大的特點在于保留原來的特性,雖然不一定能完全避免哈希沖突,但是能比一般哈希保留的更好,保持最大可能的相似度。
『哈希思想及實現(xiàn)』小編表示這是一個高冷的話題,離我太遙遠(yuǎn),等我學(xué)的更好時會自己寫的;現(xiàn)在就先放上大牛的博客吧:局部敏感哈希。
轉(zhuǎn)載于:https://www.cnblogs.com/TFLS-gzr/p/11120479.html
總結(jié)
以上是生活随笔為你收集整理的【期外】 (一)关于LSH :局部敏感哈希算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记-----分布式事务基础理论,C
- 下一篇: 强化学习在生成对抗网络文本生成中扮演的角