zoukankan      html  css  js  c++  java
  • 求两个字符串的编辑距离

    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;
    }
  • 相关阅读:
    Shell 基础
    史上最全储能系统优缺点梳理
    IEEE文章分类
    【能源常识】如何理解“电力电量平衡”
    最优化基础(五)
    最优化基础(四)
    json
    python基础知识之zip
    Python sendmail
    指定的结尾换行
  • 原文地址:https://www.cnblogs.com/rainsoul/p/11077183.html
Copyright © 2011-2022 走看看