需要代碼聯系作者,不做義務咨詢。
一.算法實現
基於p-stable分布,並以‘哈希技術分類’中的分層法為使用方法,就產生了E2LSH算法。
E2LSH中的哈希函數定義如下:
其中,v為d維原始數據,a為隨機變量,由正態分布產生; w為寬度值,因為a∙v+b得到的是一個實數,如果不加以處理,那么起不到桶的效果,w是E2LSH中最重要的參數,調得過大,數據就被划分到一個桶中去了,過小就起不到局部敏感的效果。b使用均勻分布隨機產生,均勻分布的范圍在[0,w]。
但是這樣,得到的結果是(N1,N2,…,Nk),其中N1,N2,…,Nk在整數域而不是只有0,1兩個值,這樣的k元組就代表一個桶。但將k元組直接當做桶標號存入哈希表,占用內存且不便於查找,為了方便存儲,設計者又將其分層,使用數組+鏈表的方式。
對每個形式為k元組的桶標號,使用如下h1函數和h2函數計算得到兩個值,其中h1的結果是數組中的位置,數組的大小也相當於哈希表的大小,h2的結果值作為k元組的代表,鏈接到對應數組的h1位置上的鏈表中。在下面的公式中,r’為[0,prime-1]中依據均勻分布隨機產生。
經過如上操作后,查詢步驟如下。
對於查詢點query,
使用k個哈希函數計算桶標號的k元組;
對k元組計算h1和h2值,
獲取哈希表的h1位置的鏈表,
在鏈表中查找h2值,
獲取h2值位置上存儲的樣本
Query與上述樣本計算精確的相似度,並排序
按照順序返回結果。
E2LSH方法存在兩方面的不足[8]:首先是典型的基於概率模型生成索引編碼的結果並不穩定。雖然編碼位數增加,但是查詢准確率的提高確十分緩慢;其次是需要大量的存儲空間,不適合於大規模數據的索引。E2LSH方法的目標是保證查詢結果的准確率和查全率,並不關注索引結構需要的存儲空間的大小。E2LSH使用多個索引空間以及多次哈希表查詢,生成的索引文件的大小是原始數據大小的數十倍甚至數百倍。
部分參考文獻:http://dataunion.org/12912.html
二.遺留問題
2.1 hash過后不是還需要由hash嗎找到原來的點么,怎么實現?
2.2 球p穩定分布例子
2.3 k元組存入多個哈希表?那查找的結果是什么?每個表中的結果的並?
三.問題擴展
E2LSH可以說是分層法基於p-stable distribution的應用。另一種當然是轉換成hashcode,則定義哈希函數如下:
其中,a和v都是d維向量,a由正態分布產生。同上,選擇k個上述的哈希函數,得到一個k位的hamming碼,按照”哈希技術分類”中描述的技術即可使用該算法。
找我要代碼可以,但是請不要白嫖行嗎? 各種問來問去,願意出5塊錢,或者100塊還要考慮幾天。
1.讓我實現一篇論文(論文還得我自己看),聊了半天,就願意出10塊錢,你特碼在逗我;
2.讓我改進一篇論文,然后給他講講論文和代碼,再想想創新點實現創新代碼,並寫出主要步驟畫出圖,願意出幾百而已;
3.讓我完全定題目和創新點並寫小論文,然后說完全做好給錢;我原來真這樣,給南京某幾個學校的兩個個學生做完,
講好的價錢,視頻驗完,結果不要了。草,我當時真是想給你曝光,當然最后沒有曝光。基本誠信都沒,我相信你,你卻這個樣子。
4.脾氣臭的屌絲,我耐心引導你理清思路(自己要是思路清晰地話就剩下寫代碼的事情而已),結果動不動發火。行,你多給點錢也行啊,
結果沒過半小時直接把我刪了;
5.還有若干博士,讓我先給個創新點,各種保證一定給錢,我想着博士嘛,沒事。結果我給他講完,他各種佩服,結果直接把我拉黑了(北京某985的)..
上過碩士的都知道idea是最重要的..沒idea啥都沒
