• 自然语言处理1-2: 编辑距离


    原文出处:https://algorithms.tutorialhorizon.com/dynamic-programming-edit-distance-problem/

    问题:假设我们现在有两个字符串s1和s2,并且给出如下所示的三个编辑操作,写出一个算法,当每次只能使用其中一个编辑操作时,找到将字符串s1转换成s2的最小编辑次数。

      允许的编辑操作:

      1.insert-插入一个字符

      2.delete-删除一个字符

      3.replace-将字符串中的一个字符用另一个字符代替

    例如

    String s1 = "horizon"
    String  s2 = "horzon"
    Output: 1  {remove 'i' from string s1}
    
    String s1 = "horizon"
    String  s2 = "horizontal"
    Output: 3  {insert 't', 'a', 'l' characters in string s1}

    分析:从后往前依次比较字符串中的每一个字符,对于每次比较之后的结果,我们执行如下两种操作将问题变成子问题:

      1.如果两个字符串末尾的字符相等,那么我们忽视最后一个字符,将问题转化为找到剩下的字符组成的字符串的编辑距离

      2.如果两个字符串末尾的字符不相等,那么我们分别执行以上三种操作(insert,delete,replace),执行完之后,再递归的

       解决两个字符串的编辑距离。

    算法:假设我们有长度为n的字符串s1和长度为m的字符串s2,比较s1和s2末尾的字符:

      1.如果两个字符相等,那么忽视末尾字符,求前n-1和m-1的字符串的编辑距离

      2.如果两个字符不相等,那么执行如下三种操作,并且选择其中的最优解:

        a.在s1的末尾插入一个字符,该字符和s2末尾的字符相同,此时s1的长度是n+1,s2的长度是m。然后忽视末尾字符,求前n和前m-1的字符串的编辑距离x1

        b.将s1的末尾的字符删掉,此时s1的长度是n-1,s2的长度是m。求长度为n-1和m的字符串的编辑距离x2

        c.将s1的末尾的字符用s2的末尾的字符代替,然后求前n-1和m-1的编辑距离x3

      编辑距离就是x1+1, x2+1, x3+1中的最小值

    同时,我们可以用动态规划自底向上来降低时间复杂度

      

  • 相关阅读:
    【工具相关】iOS-Reveal的使用
    iOS-策略模式
    iOS-观察者模式
    iOS-工厂模式
    iOS-MVC模式
    iOS-Delegate模式
    iOS----单例模式(Singleton)
    iOS----支付(微信支付、支付宝支付、银联支付控件集成支付)(转)
    详解Linux系统下PXE服务器的部署过程
    配置iptables实现本地端口转发的方法详解
  • 原文地址:https://www.cnblogs.com/loubin/p/13672786.html
Copyright © 2020-2023  润新知