zoukankan      html  css  js  c++  java
  • [NLP] 2.3 编辑距离和对齐 (Edit Distance and Alignment)

    获得两个strings的距离,是非常有价值的事情。
    你可以用这个进行单词的修正,例如你在office里面输入了单词graffe,然后软件帮你自动搜索最近的单词,类似graf,graft等等。
    对于基因编辑来说,也非常有帮助。我们都知道基因由AGCT序列组合而成,它们可以被视为文本,然后查找最近的基因序列。

    Edit Distance 编辑距离

    我们可以使用编辑距离,表征两个strings的关系,其中『编辑』包含了如下操作:

    • 插入
    • 删除
    • 替换
      使用这三个操作,能够把一个字符变成另外一个,最少使用多少次,那么就是编辑距离。

    如何获取最小编辑距离,其实就是一道leetcode困难题的事儿:

    class Solution:
        def minDistance(self, word1: str, word2: str) -> int:
            # x轴是word2,y是word1,+1是初始位置
            dp = [[0]* (len(word2)+1) for _ in range(len(word1)+1)]
            # 初始空位置,如果想要成为word1,需要不停的insert操作
            for i in range(len(dp)):
                dp[i][0] = i
            # 同理,如果想要成为word2,也要不停的insert
            for j in range(len(dp[0])):
                dp[0][j] = j
            # 从(1,1)开始迭代
            for i in range(1,len(dp)):
                for j in range(1,len(dp[i])):
                    # 取左,上,左上的最小值,然后进行一个操作(+1)
                    dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1
                    # 如果两个字符相同,那不用变,直接取左上的操作数
                    if word1[i-1] == word2[j-1]:
                        dp[i][j] =dp[i-1][j-1]
            return dp[-1][-1]
    

    直接看题解即可:
    https://leetcode-cn.com/problems/edit-distance/solution/edit-distance-by-ikaruga/

  • 相关阅读:
    VSS使用
    Delphi简单数据库连接程序
    为表增加字段与拷贝数据到另一个表
    VSTS 使用
    Delphi实现个相似的功能界面共用一个窗体
    看代码笔记
    数据库安全管理
    函数
    【USACO】Ordered Fractions 顺序的分数
    C# 专业数据库连接配置界面
  • 原文地址:https://www.cnblogs.com/kykai/p/14140303.html
Copyright © 2011-2022 走看看