來源:互聯網
上載者: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相似性