求解類似資料如何搜尋!

來源:互聯網
上載者:User
關鍵字 php linux mysql nosql memcached
資料格式如下
"10101010001001101100100011000100100100001011100001000010010101000101010101000101".....共計256位
就是除了1就是0的唯一標示符256位的跟64位的還有1024位的
這種標示符
目前我已經有256位的跟64位的了,目前資料我已經產生了800w條,陸續產生中

字串1="10101101001010010111010101100001011101000101010010001000111001101010010101"...
字串2="10101001001011010111010101000001011101000101110010001001111001101010010101"....
求這兩個字串的相似性 順序比較 以下為相似性 計算

$len = strlen($hash1);for ($i = 0; $i < $len; $i++){    if ($hash1[$i] !== $hash2[$i])    $count++;}    return  1-($i/$len);

得到相似性
搜尋要求為
從資料庫中讀取出跟 "字串s" 相似性>0.9的,目前資料採用mysql儲存,屬於個人瞎胡鬧搞得東西,不會採用商務資料庫儲存買不起,可以採用nosql儲存,memcache儲存,主要程式語言PHP,javascript算是預先處理,我就會這兩種!

求大神解這種資料如何搜尋!!!!!!

回複內容:

資料格式如下
"10101010001001101100100011000100100100001011100001000010010101000101010101000101".....共計256位
就是除了1就是0的唯一標示符256位的跟64位的還有1024位的
這種標示符
目前我已經有256位的跟64位的了,目前資料我已經產生了800w條,陸續產生中

字串1="10101101001010010111010101100001011101000101010010001000111001101010010101"...
字串2="10101001001011010111010101000001011101000101110010001001111001101010010101"....
求這兩個字串的相似性 順序比較 以下為相似性 計算

$len = strlen($hash1);for ($i = 0; $i < $len; $i++){    if ($hash1[$i] !== $hash2[$i])    $count++;}    return  1-($i/$len);

得到相似性
搜尋要求為
從資料庫中讀取出跟 "字串s" 相似性>0.9的,目前資料採用mysql儲存,屬於個人瞎胡鬧搞得東西,不會採用商務資料庫儲存買不起,可以採用nosql儲存,memcache儲存,主要程式語言PHP,javascript算是預先處理,我就會這兩種!

求大神解這種資料如何搜尋!!!!!!

我能想到演算法上的兩個最佳化點。

第一個,是你逐位判斷的代碼裡面,只要$count大於$len的10%就不用迴圈下去了,相似性必然小於0.9。

第二個,既然資料是自己產生的,那可以在產生時一併儲存拆分值的十六進位數。

舉個例子,比如1024位的字串,每16位為一個單位,共拆分為64個單位,每個單位的16位位元轉換成4位16進位數,和這個1024位的字串一併儲存起來。
每次比較時,先逐個比較這64個單位的數值是否相同,如果有58個相同,那相似性就有0.9以上。

如果只有57個相同呢?剩下不同的7個4位16進位數,一共有4*7=28位十六進位數字,然後進行逐個比較。
有a個相同,則1024位轉化成256位的十六進位數的數字上的相似性等於((57*4)+a) / (64*4) ,他要大於0.9。也就是說,在逐個比較時,a大於等於0.9*64*4 - 57*4 就不用判斷了,相似性大於0.9。

如果只有a-1個相同呢?把不同的28-(a-1)位轉化為2進位,按上面的方法,逐個比較。
有b個一樣,相似性為((57*16)+(a-1)*4+b) / 1024,他要大於0.9,即b大於等於0.9*1024 - 57*16 - (a-1)*4時,相似性大於0.9。

把上面的57和a-1換成任意的x y就是實際情況了。雖然計算量還是很大,不過相比逐個比較小了很多了。

另外,計算出每兩個16位位元的單位的相似性的時候可以緩衝起來,留給256位和64位比較時用。仔細想想量好像也很大……就不繼續寫了。

兩個串直接做與運算,然後結果統計1的數量,與其中一個串比較,數量相近則相似

瞭解一下海明距離,還有cos相似性

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.