zoukankan      html  css  js  c++  java
  • 海明距离分类 JavaScript

    在做大数据查找的时候用到海明距离,可以利用海明距离给字符生成一个地址,类似 中国-湖南-衡山这样的,就能快速的查找字符和相似字符

    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'))
  • 相关阅读:
    【Henu ACM Round#17 A】Simple Game
    【Henu ACM Round #12 E】Thief in a Shop
    【Henu ACM Round#16 D】Bear and Two Paths
    【Henu ACM Round#16 A】 Bear and Game
    P4824 [USACO15FEB]Censoring (Silver) 审查(银)
    P4001 [BJOI2006]狼抓兔子
    P2444 [POI2000]病毒
    P3966 [TJOI2013]单词
    P3796 【模板】AC自动机
    P4574 [CQOI2013]二进制A+B
  • 原文地址:https://www.cnblogs.com/caoke/p/11864656.html
Copyright © 2011-2022 走看看