zoukankan      html  css  js  c++  java
  • 数学基础:三、动态规划1(求解编辑距离)

    编辑距离的概念,百度一下你就知道。也有很多文章有所介绍
    https://blog.csdn.net/chichoxian/article/details/53944188
    做动态规划的题就是根据表格,找出规律,推导出状态转移方程
    比如编辑距离状态转移方程如下:
    d[i+1, j+1] = min(d[i, j+1] + 1, d[i+1, j] + 1, d[i, j] + r(i, j))
    下面这个我是用Java实现的:

    public class Lesson9_1 {
        public static int getStrDistince(String a, String b) {
            if (a == null || b == null) return -1;
    
            int aLength = a.length();
            int bLength = b.length();
            int[][] d = new int[aLength + 1][bLength + 1];
    
            for (int i = 0; i <= aLength; i++) {
                d[i][0] = i;
            }
    
            for (int j = 0; j <= bLength; j++) {
                d[0][j] = j;
            }
    
            //d[i+1, j+1] = min(d[i, j+1] + 1, d[i+1, j] + 1, d[i, j] + r(i, j))
            for (int i = 0; i < aLength; i++) {
                for (int j = 0; j < bLength; j++) {
                    // d[i, j+1] + 1
                    int m = d[i][j + 1] + 1;
                    // d[i+1, j] + 1
                    int n = d[i + 1][j] + 1;
                    int r = a.charAt(i) == b.charAt(j) ? 0 : 1;
                    // d[i, j] + r(i, j)
                    int k = d[i][j] + r;
    
                    int min1 = Math.min(m, n);
                    int min2 = Math.min(min1, k);
    
                    d[i + 1][j + 1] = min2;
                }
            }
    
            return d[aLength][bLength];
        }
    
        public static void main(String[] args) {
            int strDistince = getStrDistince("mou", "mouuse");
            System.out.println(strDistince);
        }
    }
    
  • 相关阅读:
    QSerialPort类
    初识Json
    Qt plugins(插件)目录
    Qt连接sql server数据库遇到的问题
    串口通信中,QString 、QByteArray 转化需要注意的问题
    Qt : 隐式数据共享(copy on write)
    Ascii码 、16进制与 char
    Caffe框架详细梳理
    时间管理
    Atom实用配置插件for C++
  • 原文地址:https://www.cnblogs.com/dulinan/p/12032998.html
Copyright © 2011-2022 走看看