【动态规划】 LeetCode #72 编辑距离

编辑距离算法应用总结 因为项目需要,学习并应用了编辑距离算法,今天做个总结。(作为业务工程团队的同学,平时应用算法解决问题的机会并不多,但是能力 / 思维还是要有,对技术架构 / 技术选型都有帮助,真的落地实现,算法资源不足的时候,也能顶上)。编辑距离算法可以用于衡量文本相似度,进而解决文本的模糊搜索 / 匹配问题。编辑距离算法时间复杂度是 O(mn),如果文本数量(t)较大,遍历文本集合,计算关键字和文本 Pair ... 阅读详情

题目链接:

LeetCode #72 编辑距离

题目描述:

  1. 编辑距离
    给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

插入一个字符
删除一个字符
替换一个字符

示例 1:

输入:word1 = “horse”, word2 = “ros”
输出:3
解释:
horse -> rorse (将 ‘h’ 替换为 ‘r’)
rorse -> rose (删除 ‘r’)
rose -> ros (删除 ‘e’)
示例 2:

输入:word1 = “intention”, word2 = “execution”
输出:5
解释:
intention -> inention (删除 ‘t’)
inention -> enention (将 ‘i’ 替换为 ‘e’)
enention -> exention (将 ‘n’ 替换为 ‘x’)
exention -> exection (将 ‘n’ 替换为 ‘c’)
exection -> execution (插入 ‘u’)

解决方案:

二维动态规划,这个题的状态设置和之前不大一样,不像机器人走路之类的直观,设 dp[i][j] 为把长度为 i 的 word1 转换成长度为 j 的 word2 所使用的的最少操作数,则计算dp[i][j]有以下几种情况:

如果字符相等,dp[i][j] = dp[i-1][j-1]

如果字符不相等,需要选择一种操作:(具体理解后面讲)
插入一个字符:dp[i][j] = dp[i][j-1] + 1
删除一个字符:dp[i][j] = dp[i-1][j] + 1
替换一个字符:dp[i][j] = dp[i-1][j-1] + 1
dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1

初始化:
第一行:word1为空,想要得到word2只能插入字符
第一列:word2为空,想要得到空串只能在word1上删除字符

代码及理解:

在这里插入图片描述

/*
*二维动态规划:设 dp[i][j] 为把长度为 i 的 word1 转换成长度为 j 的 word2 所使用的的最少操作数
*如果字符相等,dp[i][j] = dp[i-1][j-1]
*如果字符不相等,有三种操作:
*插入一个字符:dp[i][j] = dp[i][j-1] + 1
*删除一个字符:dp[i][j] = dp[i-1][j] + 1
*替换一个字符:dp[i][j] = dp[i-1][j-1] + 1
*第一行:word1为空,想要得到word2只能插入字符
*第一列:word2为空,想要得到空串只能在word1上删除字符
*/
class Solution {
    public int minDistance(String word1, String word2) {
        if(word1 == null || word2 == null){//如果有任意一个串为0,只能通过多次增加/删除操作得到结果
            return Math.max(word1.length(), word2.length());
        }
        char[] w1 = word1.toCharArray();
        char[] w2 = word2.toCharArray();
        int[][] dp = new int[w1.length + 1][w2.length + 1];
        //对第一行、第一列进行初始化
        dp[0][0] = 0;
        for(int j = 1; j <= w2.length; j++){
            dp[0][j] = j;
        }
        for(int i = 1; i <= w1.length; i++){
            dp[i][0] = i;
        }
        for(int i = 1; i <= w1.length; i++){
            for(int j = 1; j <= w2.length; j++){
                if(w1[i - 1] == w2[j - 1]){//如果 word1 第 i 个字符和 word2 第 j 个字符相等(注意下标减1)
                    dp[i][j] = dp[i - 1][j - 1];
                }else{//如果字符不等,需要选择一种操作
                    dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i][j - 1], dp[i - 1][j] ))+ 1;//三个数的最小值要用两次 Math.min()
                }
            }
        }
        return dp[w1.length][w2.length];
    }
}                                                                             

对于字符串的问题,八成都能用动态规划解决,并且遇到动态规划的题目,最好的方式就是画图,我们以word1 = “intention”, word2 = "execution"为例来进一步理解一下,当字符不相等时,状态转移方程式为什么是:
dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1

我们先输出一下dp[][]:
在这里插入图片描述
我们以 dp[5][4] 为例进行分析:

dp[5][4]的含义是,从 inten -> exec 最少需要几步操作。首先,字符 ‘n’ 和 ‘c’ 是不相等的(注意这里比较的是字符,而非字符串),我们可以采取以下操作来转换成 exec :

①替换。即 ‘inte’ -> ‘exe’ + 1,而 ‘inte’ -> ‘exe’ 的最少操作数就是 dp[4][3](注意此时字符串已经转换成了 ‘exe’),故选择替换操作,最少操作数为 dp[i][j] = dp[i-1][j-1] + 1 = 3 + 1 = 4;

②增加。即 ‘inten’ -> ‘exe’ + 1,而 ‘inten’ -> ‘exe’ 的最少操作数就是 dp[5][3],故选择替换操作,最少操作数为 dp[i][j] = dp[i][j-1] + 1 = 4 + 1 = 5;

③删除。即当前的 ‘inten’ 删除了一个 ‘n’,再转换成 ‘exec’, 操作数即 ‘inte’ -> ‘exec’ + 1,而 ‘inte’ -> ‘exec’ 的最少操作数就是 dp[4][4],故选择替换操作,最少操作数为 dp[i][j] = dp[i-1][j] + 1 = 3 + 1 = 4。

最终取三者中最小的,dp[5][4] = 4。需要注意的是,代码中三个数中的最小值需要用两次 Math.min(),即dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i][j - 1], dp[i - 1][j] ))+ 1;。

这种方法的时间复杂度为O(m*n),空间复杂度为O(m*n)。其实空间复杂度还可以压缩到O(n),如果把较小的串作为列数,最低可以将空间复杂度降低为O(min(m, n)),因为我们只用到了上方、左方、左上方的数据,其中上方和左方的数据是很容易获取的,只创建一维数组 dp[],在计算 dp[j] 时,dp[j-1]已经是更新后的数据,即左方的数据,而此时的 dp[j] 还没有更新,保留的是上方的数据, 所以这个优化方法的难点就在于如何保存左上方的数据,后面会专门写一篇文章讲。

深入理解动态规划:从Leetcode实践出发【8】(题号718、72) 动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用 阅读详情

相关推荐

Leetcode No.72 编辑距离(动态规划)

一、题目描述 给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例1: 输入:word1 = "horse", word2 = "ros" 输出:3 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e') 示例2: 输入:word...

594

学习笔记 | 动态规划

动态规划 学习动态规划,它将问题分成小问题,并先着手解决这些小问题。 学习如何设计问题的动态规划解决方案。 需要在给定约束条件下优化某种指标时,动态规划很有用。 每种动态规划解决方案都涉及网格。 单元格中的值通常就是你要优化的值。 每个单元格都是一个子问题,因此你需要考虑如何将问题分解为子问题。 ...

大虎牙的博客 201

【低空经济】低空无人驾驶航空器运行管理系统设计方案

低空无人驾驶航空器运行管理系统(以下简称“系统”)旨在为低空域内的无人驾驶航空器(UAV)提供高效、安全、智能的运行管理服务。系统通过集成先进的通信、导航、监控、数据处理和人工智能技术,实现对低空域内无人驾驶航空器的实时监控、动态调度、风险评估和应急响应,确保其在复杂空域环境中的安全运行。系统的核心功能包括空域管理、飞行计划审批、实时监控、冲突预警、应急管理和数据分析。空域管理模块负责划分和管理低空域资源,确保不同飞行任务之间的空域隔离和高效利用。

2502_92579126的博客 1140

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。

示例 1: 输入: word1 = "horse", word2 = "ros" 输出: 3 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e') 示例 2: 输入: word1 = "intention", word2 = "execution" 输出: 5 解释: i...

u012606924的博客 5645

手把手教你用QEMU虚拟化华为路由器固件(附完整网络配置指南)

本文提供了一份详尽的QEMU虚拟化华为路由器固件的实战指南。从固件解包、网络桥接配置到QEMU虚拟机启动,手把手教你搭建完整的嵌入式设备沙箱环境,特别适合安全研究、逆向分析和学习嵌入式系统工作原理。

tgb3456789的博客 937

c++界面开发入门

c++界面开发 DialogBox MessageBox

jiaodou2的博客 6516

字符串的编辑距离(LeetCode: 72. Edit Distance)-动态规划-Python

问题描述:给定两个字符串A和B,要用最少的操作将字符串A转换成字符串B。其中字符串操作包括:(1)删除一个字符(Insert a character)(2)插入一个字符(Delete a character)(3)修改一个字符(Replace a character)将字符串A转换成B串所用的最少字符操作数称为字符串A到 B的编辑距离,又称为Levenshtein距离,在1965年,俄罗斯数学家V...

Growth Diary 4223

深入解析数据通信中的码元速率与比特率:从基础到实战应用

本文深入解析了数据通信中的核心概念码元速率与比特率,通过生动的比喻和公式(比特率=波特率×log₂(M))揭示其本质关系。文章结合BPSK、QPSK、16QAM等调制技术,剖析了从4G/5G到LoRa等实战场景中如何权衡速率、距离与可靠性,并提供了软考真题解析与系统设计建议,帮助读者从理论到应用全面掌握数据速率优化。

weixin_29324877的博客 213

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数

#include<iostream> #include<string> #include<vector> using namespace std; int func(string word1, string word2) { int n1 = word1.size(); int n2 = word2.size(); int **dp=new int*...

Shrimp_millet 3144

ROS机器人全覆盖路径规划实战:6种ipa算法对比与选型指南(附避坑经验)

本文深入对比了ROS中ipa_coverage_planning功能包集成的6种全覆盖路径规划算法,包括牛耕分解、栅格旅行商、神经网络、局部能量最小、轮廓线和凸感知放置。文章从覆盖率、重复率、计算效率、动态避障等核心工程指标出发,提供了基于不同场景(如静态/动态环境、规则/复杂布局)的实战选型指南,并分享了神经网络和局部能量最小等关键算法的参数调优与避坑经验,旨在帮助开发者根据实际需求选择并优化最合适的ipa覆盖算法。

perl8的博客 363

两层板如何做阻抗控制呢

两层板如何做阻抗控制呢? 这个问题可能很多人都会碰到,有的人在此等需要做阻抗控制的情况都选择做多层板。诚然,多层板在阻抗控制,EMC等等方面都有着天然的优势。然而,在价格上和周期上,两层板就有着绝对优势了。 对于成本非常敏感而又不是太复杂的产品,尽管对于我们硬件工程师而言,有一堆的理由要求使用多层板。然而在面对毛都不懂的老板“别人能做,你为什么不能做?”这个问题时只得低下我们高傲的头颅。 好...

weixin_42005993的博客 2万+

【LeetCode】72.编辑距离 #动态规划

题目 【LeetCode】72.编辑距离 难度:困难 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: -插入一个字符 -删除一个字符 -替换一个字符 示例 1: 输入:word1 = “horse”, word2 = “ros” 输出:3 解释: horse -> rorse (将 ‘h’ 替换为 ‘r’) rorse -> rose (删除 ‘r’) rose -> ros (删除 ‘e

榎本径的博客 168

广东省低应变题库

11.按《建筑地基基础检测规范》DBJ/T15-60-2019的规定,采用低应变法对混凝土预制桩进行检测时,地基基础设计等级为甲级的桩基工程抽检桩数不应少于总桩数的30%,其余桩基工程抽检桩数不应少于总桩数的20%,且不得少于10根;16.按《建筑地基基础检测规范》DBJ/T15-60-2019的规定,当对某桩的桩身完整性判定为III类时,可认为该桩不满足验收条件,不用进一步确定该桩桩身缺陷对桩身结构承载力的影响程度。2.地基基础检测所用计量器具均应在检定(校准、验证)的有效期内,性能符合相关技术要求。

ZShy001238的博客 319

【LeetCode】#72编辑距离(Edit Distance)

【LeetCode】#72编辑距离(Edit Distance) 题目描述 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 1.插入一个字符 2.删除一个字符 3.替换一个字符 示例 示例 1: 输入: word1 = “horse”, word2 = “ros” 输出: 3 解释: horse -&g...

weixin_43858604的博客 118

34、高效探索柔性蛋白质环构象空间的算法

本文介绍了一种高效探索柔性蛋白质环构象空间的算法,通过种子采样和变形采样两种技术,同时满足运动学闭合和避免空间位阻冲突的约束条件。种子采样能够在闭合无冲突构象空间中广泛生成构象,而变形采样则可以对“有趣”区域进行更密集的探索。实验结果表明,这两种方法在不同大小和受限程度的蛋白质环上均表现出色,运行时间在可接受范围内。相关算法已集成到工具包LoopTK中,可在https://simtk.org/home/looptk获取。

moon9的博客 127

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

力扣LeetCode #72 编辑距离(MinDistance)

- 题目描述 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 提示: 0 <= word1.length, word2.length <= 500 word1 和 word2 由小写英文字母组成 来源:LeetCode - 示例 示例 1: 输入:word1 = “horse”, word2 = “ros” 输出:3 解释: horse ->

weixin_49155948的博客 758

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Edit Distance

LeetCode #72. Edit Distance状态:d[i][j]表示A[1~i], B[1~j]之间的编辑距离状态方程: 1. d[0, j] = j; 2. d[i, 0] = i; 3. d[i, j] = d[i-1, j-1]; A[i] == B[j] 4. d[i, j] = min{d[i-1, j-1], d[i, j-1], d[i-1, j]} +1; A[i]

shimingliabc的博客 263

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LeetCode第72题_编辑距离

给你两个单词word1和word2,请返回将word1转换成word2所使用的最少操作数。

qq_40263592的博客 1286

力扣LeetCode72.编辑距离及Python源码实现

本题为LeetCode题库中第72题编辑距离,难度困难,题目请参考这里。这道题应该是字符串处理,自然语言算法工程师必做一道题目,很久都没想到解决思路突然有了灵感。 标准的DP题目,这道题的难点还是在于如何去定义状态转移方程,前面分享的那道地下城游戏也是难在定义状态转移方程,所以如何去定义才是最重要的!然后就是推导出如何变换。这种题很容易就想复杂了,而且情况一多根本就不知道怎么入手,这就陷入了僵局,如何跳出来?只能多刷题培养这种思维。 定义: 当字符串word1的长度为i,字符串word2的长度为j

Alex__Mahone的专栏 960

【leetcode】72. 编辑距离

输入:word1 = “intention”, word2 = “execution”inention -> enention (将 ‘i’ 替换为 ‘e’)enention -> exention (将 ‘n’ 替换为 ‘x’)exention -> exection (将 ‘n’ 替换为 ‘c’)输入:word1 = “horse”, word2 = “ros”horse -> rorse (将 ‘h’ 替换为 ‘r’)rose -> ros (删除 ‘e’)

qq_38473254的博客 1420

Leetcode 72. 编辑距离

Leetcode 72. 编辑距离 标签: Leetcode 题目地址: https://leetcode-cn.com/problems/edit-distance/ 题目描述 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字...

CoderWangSon 1031

【算法题】72. 编辑距离-力扣(LeetCode)

本题看初看题目的增、删、改,会感觉非常困难,因为我们自己在利用例子模拟的时候都比较难。 但是我们不妨换个思路,利用动态规划的思想,将这个问题转换成一个个子问题,利用子问题的答案来得出最终答案。

Janium的博客 834

动态规划|72.编辑距离

day55 如何编辑距离?

Talking999的博客 1154

LeetCode #72 编辑距离

给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例1: 输入:word1 = "horse", word2 = "ros" 输出:3 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose...

Chokwin的博客 254

leetcode 72. Edit Distance 编辑距离

题目要求 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入: word1 = "horse", word2 = "ros" 输出: 3 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose...

爱喝舒化奶的博客 551

【LeetCode】动态规划—72. 编辑距离(附完整Python/C++代码)

编辑距离问题是字符串处理中的经典问题之一,广泛应用于拼写纠正、DNA序列比对等领域。通过计算将一个字符串转换为另一个字符串所需的最小操作数,能够帮助我们评估它们之间的相似度。本文将详细分析编辑距离问题的基本思路,提供动态规划的实现方法,并展示 Python 和 C++ 的代码示例。

Albert_Lsk的博客 3730
上一篇: 【动态规划】 LeetCode #322 零钱兑换
下一篇: 【动态规划】 LeetCode #392 判断子序列
Code_Yilia
博客等级 码龄11年 4粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值