写个最小编辑距离吧~

【动态规划】字符串最小编辑距离Java实现 问题:给定一个源串和目标串,能够对源串进行如下操作: 在给定位置上插入一个字符 替换任意字符 删除任意字符 要求写一个程序,返回最少的操作数,使得对源串进行这些操作后等于目标串。源串和目标串的长度都小于2000。   关于编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次 阅读详情
def recursive_edit_distance(str1, str2, cost):
    if not str1:
        return len(str2) * cost["add"]
    if not str2:
        return len(str1) * cost["delete"]
    if str1[-1] == str2[-1]:
        return recursive_edit_distance(str1[:-1], str2[:-1], cost)
    else:
        return min(recursive_edit_distance(str1[:-1], str2, cost) + cost["delete"],
                   recursive_edit_distance(str1, str2[:-1], cost) + cost["add"],
                   recursive_edit_distance(str1[:-1], str2[:-1], cost) +
                   min(cost["replace"], cost["delete"] + cost["add"]))


def dp_edit_distance(str1, str2, cost):
    value = [[0] * (len(str2) + 1) for i in range(len(str1) + 1)]
    # 这里不能使用value = [[0] * (len(str2) + 1)] * (len(str1) + 1)进行初始化,因为所有行都是第一行的引用,
    # 它们是同步变化的. 最好全部用range方式初始化

    for i in range(len(str1) + 1):
        value[i][0] = i * cost["delete"]

    for j in range(len(str2) + 1):
        value[0][j] = j * cost["add"]
    for i in range(1, len(str1) + 1):
        for j in range(1, len(str2) + 1):
            if str1[i - 1] == str2[j - 1]:
                value[i][j] = value[i - 1][j - 1]
            else:
                value[i][j] = min(value[i - 1][j] + cost["delete"],
                                  value[i][j - 1] + cost["add"],
                                  value[i - 1][j - 1] + min(cost["replace"], cost["delete"] + cost["add"]))
    for i in range(len(value)):
        print(value[i])
    return value[-1][-1]


str_ = ["",
        "a",
        "abc",
        "efa",
        "bcc"]
cost = {"delete": 1, "add": 1, "replace": 1}
# 如果不同的操作对应的花费不同的话,可能出现的一个情况是,使用一次删除和一次插入代替一次替换更加划算

for i in range(len(str_)):
    for j in range(i + 1, len(str_)):
        print("str_[{}], str_[{}]:".format(i, j),
              recursive_edit_distance(str_[i], str_[j], cost) == dp_edit_distance(str_[i], str_[j], cost))


str1 = "acef"
str2 = "abce"
print(dp_edit_distance(str1, str2, cost))

# TODO: 打印最小编辑路径

C#实现最小编辑距离算法Levenshtein Distance - 完整源码 最小编辑距离算法(Levenshtein Distance),也被称为编辑距离,是一个用于比较两个字符串相似度的算法。该算法可以计算插入、删除和替换字符所需的最少操作次数。以上代码实现了一个简单的最小编辑距离算法,你可以使用该算法来比较两个字符串的相似度,或者将其用于其他字符串处理操作。现在让我们来创建一个控制台应用程序并将该函数调用包含在其中,并进行测试。C#语言可以非常方便地实现最小编辑距离算法,下面我们将提供完整源码并进行详细讲解。此函数计算两个字符串的最小编辑距离并返回结果。 阅读详情

相关推荐

10、自然语言处理中的字符串匹配、编码与标注方案

本文详细介绍了自然语言处理中的基础技术,包括近似字符串匹配、字符集编码以及数据标注方案。内容涵盖最小编辑距离的计算、ASCII与Unicode编码的区别、字符规范化处理以及表格和XML格式的标注方法。同时,还讨论了这些技术在实际场景中的应用和未来发展趋势,为文本处理和分析提供了理论支持和技术指导。

agile9scrum的博客 102

Java字符串知识点总结

1.字符串概述和特点 (1)字符串内容永不可变 (2)字符串可以共享使用 (3)字符串效果上相当于char[]字符数组,但底层原理是byte[]字节数组 2.字符串的构造方法和直接创建 创建字符串的常见3+1种方式: 3种构造方法: public String() 创建一个空白字符串,不含任何内容 public String(char[] array) 根据字符数组的内容,来创建对应的字符串 public String(byte[] array) 根据字符数组的内容,来创建对应的字符串 public cla

weixin_45706384的博客 939

编辑距离 字符串的相似度

编辑距离(EditDistance)定义 编辑距离就是用来计算从原串(s)转换到目标串(t)所需要的最少的插入,删除和替换的数目,在NLP中应用比较广泛,如一些评测方法中就用到了(wer,mWer等),同时也常用来计算你对原文本所作的改动数。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。

python编辑距离正则匹配_计算TensorFlow序列之间的编辑距离

tf.edit_distanceedit_distance (hypothesis ,truth ,normalize = True ,name = 'edit_distance')计算序列之间的编辑距离.该操作采用可变长度序列(假设(hypothesis)和真值(truth)),每个序列都提供 SparseTensor,并计算编辑距离.通过将规范化设置为 true, 可以将编辑距离正常化.例如,...

weixin_39637975的博客 251

【3】Ubuntu18.04下载与安装,以及中文输入法的安装

Ubuntu18.04下载与安装一、下载二、安装(在VMware 16 pro中安装Ubuntu18.04)三、Ubuntu中安装中文输入法1.检查 fcitx 框架2.安装输入法 一、下载 下载地址:Ubuntu Releases 往下拉,找到自己需要的安装版本(建议不要安装最新版,因为你在使用时候遇到的错误大多都是以前版本的,最新版本的,解决方案特别少) 我这里安装的是Ubuntu18.04 一般都是使用desktop版本的(desktop版和server版本的区别:请看这篇文章) 之后点击下载即

斯基的朦胧 1万+

小龙虾 OpenClaw 安装全攻略:本地部署 AI 智能体一步到位

OpenClaw(昵称小龙虾)是一款 MIT 开源协议的本地优先 AI 智能体执行网关,支持多平台接入、本地部署,能实现自然语言驱动的设备自动化操作,区别于纯对话 AI,可直接操控系统执行实际任务,数据全程本地存储更安全。本文带来 2026 最新版 OpenClaw 安装教程,适配 Windows/macOS/Linux 全系统,新手也能一键搞定。

lujiawei00的专栏 1975

第二十二节,TensorFlow中RNN实现一些其它知识补充

一 初始化RNN 上一节中介绍了通过cell类构建RNN的函数,其中有一个参数initial_state,即cell初始状态参数,TensorFlow中封装了对其初始化的方法。 1.初始化为0 对于正向或反向,第一个cell传入时没有之前的序列输出值,所以需要对其进行初始化。一般来讲,不用刻意取指定,系统会默认初始化为0,当然也可以手动指定其初始化为0. initial_state ...

weixin_30482181的博客 236

香橙派5使用RK3588S内置NPU加速yolov5推理,实时识别数字达到50fps

香橙派5采用了RK3588S,内置的NPU达到了6Tops的算力,博主这里记录一下自己的踩坑过程,好不容易做出来的不能以后忘记了(手动狗头)。这里博主还在B站上发布了效果视频,大家感兴趣的话可以看一下。其中解决了先验框标注位置不对,或者出现非常多的框的问题

weixin_51651698的博客 2万+

Python面试题整理-牛客网

1、[单选题]关于Python内存管理,下列说法错误的是 A. 变量不必事先声明 B. 变量无须先创建和赋值而直接使用 C. 变量无须指定类型 D. 可以使用del释放资源 解析1:B Python 是弱类型脚本语言,变量就是变量,没有特定类型,因此不需要声明。 但每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 用 del 语句可以释放已创建的变量(已占用的资源)。 解析2: 1.变量无需事先声明 2.变量无需指定类型 3.程序员不用关心内存管理 4.变量名会被“回收” 5.del语句能够直.

mysteryflower的专栏 4029

BUUCTF--[OGeek2019]babyrop

才学习了基本的ROP流程,到处找题练,不过也没做出来几道题,以这道32位的题作为例题吧。 这道题是BUUCTF上pwn练习题里的[OGeek2019]babyrop。 代码审计 老规矩先checksec一下: 没有canary保护,nx保护开启排除shellcode可能性,FULL RELEO为地址随机化。 观察主函数,先设定了一个闹铃,到时间就会强制退出程序,解除闹铃的方法在上一篇博客中提到过了, 这道题中闹铃函数依然对我们解题起不到什么干扰作用。 主函数的思路大概是:生成一个随机数,把这个随机数作为

N1rvana的博客 6007

Win11内核隔离无法打开的解决方案详解

内核隔离问题的解决需遵循"先硬件后软件"的排查原则,90%以上的案例可通过驱动清理或外设断开解决。对于必须禁用该功能的用户,建议定期使用Windows Defender进行全盘扫描,并保持系统更新至最新版本。技术决策需在安全性和兼容性之间取得平衡,本文提供的多维解决方案可帮助用户构建更稳定的Windows 11使用环境。

mmoo_python的博客 4829

最小编辑距离python代码_最小编辑距离算法

最小距离算法用来计算两个字符串之间的相似度,这次主要是因为对搜索结果的ReRank需要用这个算法做一下优化。一、简介1.最小编辑距离算法又称 Min Edit Distance,是用来计算两个字符串相似性的比较常用的算法,主要应用场景包括抄袭检测,拼写检查,相似度计算等等方面,这次主要是对搜索结果ReRank时需要用到此算法,Python版的实现已放在我的github上。2. 此算法是利用sour...

weixin_39678525的博客 512

STM32F103上跑mbedtls 2.24.0:手把手教你为MQTTS加密通信打好基础

本文详细介绍了如何在STM32F103上移植和裁剪mbedtls 2.24.0,为MQTTS加密通信打下坚实基础。通过版本选择、开发环境配置、深度裁剪策略和加密功能验证,帮助开发者在资源受限的MCU上实现安全通信。文章还提供了常见问题解决方案和性能优化技巧,助力物联网设备开发。

weixin_30321709的博客 462

最小编辑距离 (MED)实现-Python

最小编辑距离 (MED) 就是指将一个字符串通过插入、删除和替换的编辑操作转变为另一个字符串所需要的最小的编辑次数。本文介绍了使用动态规划算法实现计算两个字符串MED的过程,并提供了实验过程中源码。

qq_40481602的博客 2234

MC1496乘法器AM调制电路搭建全流程(附Multisim 14.0仿真文件)

本文提供了基于MC1496乘法器搭建AM调制电路的完整实战指南。针对仿真模型缺失的痛点,详细讲解了从晶体管级手动构建MC1496等效模型,到外围电路设计、调制度参数计算与调节,并在Multisim 14.0中进行仿真验证的全流程。通过深度剖析MC1496内部原理与AM信号调制机制,帮助读者获得从仿真到实践的可控设计与排错能力。

weixin_29190169的博客 593

NXP S32k3 MCAL EMIOS PWM配置

NXP s32k 配置 EMIOS PWM

Leon_0125的博客 2702

最长公共子序列与最小编辑距离-你有更快的算法么?

前言 工作以后很少用到算法,时间长了脑袋也不灵活。但是最近,我有幸在工作中又开始用到算法,这使我欣喜若狂,这两个算法主要用在计算文本相似度的场景中。小伙伴看标题中的“最长公共子序列”和“最小编辑距离”算法想当然都认为是烂大街的算法了,有什么好讲的。当然那种朴素的$ O(N^{2}) $的算法本文不去讲,而是讲更快速的算法,而且还有变种问题。 最长公共子序列 对于字符串P和T,求其最长公共...

andun6063的博客 431

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

动态规划实例(八):最小编辑距离

动态规划最小编辑距离

学苑新空 1163

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

求de Bruijn图上与目标串最小编辑距离

使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl +

kiinghom的博客 796

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

编辑距离~

删除: dp[i][j] = min(dp[i-1][j]+1, dp[i][j] 插入: dp[i][j] = min(dp[i][j-1]+1, dp[i][j]) 替换: dp[i][j] = dp[i-1][j-1]+1 归结: dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1 还是通过表格,最直观可以了解到, 删除的话,那么其实就是相当于i-1已经做到的,此时i可以不用的情况;插入就是相当于原本i满足j-1了,此时插入就是满足.

RUN 183

随笔 - 63 文章 - 0 评论 - 398 死磕一周算法,我让服务性能提高50%

前言 我最近一直在公司做检索性能优化。当我看到这个算法之前,我也不认为我负责的检索系统性能还有改进的余地。但是这个算法确实太牛掰了,足足让服务性能提高50%,我不得不和大家分享一下。其实前一段时间的博客中也写到过这个算法,只是没有细讲,今天我准备把它单独拎出来,说道说道。说实话,本人数学功底一般,算法证明不是我强项,所以文中的证明只是我在论文作者的基础上加入了自己的思考方法,并且还没有完全证明出...

gt9000的博客 260

为什么选择Changeset?对比其他iOS数据同步方案的完整分析

在iOS开发中,高效处理数据同步和界面更新是提升用户体验的关键技术。Changeset作为一个轻量级Swift库,专门解决集合数据之间的最小编辑距离计算问题,为UITableView和UICollectionView提供优雅的动画更新方案。本文将为您详细分析Changeset的核心优势,并对比其他iOS数据同步方案,帮助您做出最佳技术选择。😊 ## 🔍 Changeset是什么?理解iOS数

gitblog_00298的博客 797

(Trie + DP) 623. K Edit Distance

思路:前缀树来存储字符串的所有前缀。 1. 状态转移方程: 2. 计算顺序 class Solution { public: /** * @param words: a set of stirngs * @param target: a target string * @param...

weixin_30691871的博客 124

【LeetCode - 161】相隔为 1 的编辑距离

【中等】字符串、动态规划

学哥斌的博客 1170

我是如何用单机实现亿级规模题库去重的?

题外话:欢迎将公众号设置为星标,技术文章第一时间看到。我们将一如既往精选技术好文,提供有价值的阅读。如有读者想要投稿,可以在公众号任意文章下留言,技术博主奖励丰厚。 作者:haolujun cnblogs.com/haolujun/p/8399275.html 背景 最近工作中遇到了一个问题:如何对大规模题库去重?公司经过多年的积累,有着近亿道题目的题库,但是由于题目来源不一导致...

Java笔记虾 1039
上一篇: 每日一练6.26——字符串的排列
下一篇: 每日一练7.12——将数字转换为字符串
math_computer
博客等级 码龄8年 43粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值