• 求两个字符串的编辑距离


    https://www.jianshu.com/p/a617d20162cf

    代码:

    float ldistance(const std::string source, const std::string target)
    {
        int distance = 0;
        float similarity = 0.0;
        int srcLen = source.length();
        int tgtLen = target.length();
    
        //step 1
        if (0 == tgtLen || 0 == srcLen)
            return 0;
        //Construct a matrix
        typedef std::vector<std::vector<int> > Tmatrix;
        Tmatrix matrix(srcLen + 1);
        for (int i = 0; i <= srcLen; ++i)
            matrix[i].resize(tgtLen + 1);
    
        //step 2 Initialize
        for (int i = 1; i <= srcLen; ++i)
            matrix[i][0] = i;
        for (int i = 1; i <= tgtLen; ++i)
            matrix[0][i] = i;
    
        //step 3
        for (int i = 1; i <= srcLen; ++i) {
            const char si = source[i - 1];
            //step 4
            for (int j = 1; j <= tgtLen; ++j) {
                const char dj = target[j - 1];
                //step 5
                int cost;
                if (si == dj) {
                    cost = 0;
                } else {
                    cost = 1;
                }
                //step 6
                const int above = matrix[i - 1][j] + 1;
                const int left = matrix[i][j - 1] + 1;
                const int diag = matrix[i - 1][j - 1] + cost;
    
                int min = left > diag ? diag : left;
                min = min > above ? above : min;
    
                matrix[i][j] = min;
    
            }
        }//step7
    
        distance = matrix[srcLen][tgtLen];
        similarity = 1 - (float) distance / std::max(srcLen, tgtLen);
        return similarity;
    }
  • 相关阅读:
    忘了SA密码的SQL SERVER
    关于VC中的错误处理
    编译filezilla
    001.第一天|第二天
    JVM学习之类加载
    JAVA学习之HashCode
    JAVA学习之泛型
    JAVA学习之动态代理
    solr学习之域的管理与中文分析器配置
    solr 学习之简介及安装
  • 原文地址:https://www.cnblogs.com/rainsoul/p/11077183.html
Copyright © 2020-2023  润新知