在做大数据查找的时候用到海明距离,可以利用海明距离给字符生成一个地址,类似 中国-湖南-衡山这样的,就能快速的查找字符和相似字符
const crypto = require('crypto');
var cryptoPassFunc = function(password) {
const md5 = crypto.createHash('md5');
return md5.update(password).digest('hex');
};
//海明距离分类
function Hamming(s1) {
const rs='552cb8e71eea229fd1ea8ac0010057e6';//相对位置
let s='';
for(let i=0;i<s1.length;i++){
if(s1[i]===rs[i]){
s=s+'0'
}else{
s=s+'1'
}
}
return parseInt(s,2);
}
const fs = require('fs-extra');
const path = require('path');
const dataDir='./data'
fs.ensureDirSync(dataDir)
//获取字符类别
function getTag(s1){
const tag=''+Hamming(cryptoPassFunc(s1))
return tag;
}
function get(k) {
const [tag,i]=k.split('-');
const tagFile=path.join(dataDir,tag)
if(fs.existsSync(tagFile)){
const arr=fs.readJsonSync(tagFile);
return arr[i];
}
return ;
}
function set(s1) {
if(s1===undefined){return }
const tag=getTag(s1)
const tagFile=path.join(dataDir,tag)
if(!fs.existsSync(tagFile)){
fs.outputJsonSync(tagFile,[s1])
return tag+'-0'
}
const arr=fs.readJsonSync(tagFile)
const i=arr.indexOf(s1);
if(i===-1){
arr.push(s1);
fs.outputJsonSync(tagFile,arr)
}
return tag+'-'+i
}
console.log(set('211'))
console.log(get('4278190079-0'))