简单介绍

编辑距离算法:
https://www.cnblogs.com/BlackStorm/p/5400809.html
https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/05.02.html
https://www.dreamxu.com/books/dsa/dp/edit-distance.html 详细

c语言实现

#include <stdio.h>
#include <string.h>
#include <algorithm>
using std::min;
int lena, lenb;
char a[1010], b[1010];
void read() {scanf("%s%s", a, b);lena = strlen(a);lenb = strlen(b);
}int dp[1010][1010];int min_of_three(int a, int b, int c)
{int tmp = a < b ? a : b;return c < tmp ? c : tmp;
}//一维数组
int edit_distance(char *a, char *b)
{int lena = strlen(a);int lenb = strlen(b);int d[lenb+1];int i, j, old, temp;for (j = 0; j <= lenb; j++) {d[j] = j;}for (i = 1; i <= lena; i++) {old = i - 1;d[0] = i;for (j = 1; j <= lenb; j++) {temp = d[j];// 算法中 a, b 字符串下标从 1 开始,c 语言从 0 开始,所以 -1if (a[i-1] == b[j-1]) {d[j] = old;} else {d[j] = min_of_three(d[j] + 1, d[j-1] + 1, old + 1);}old = temp;}}return d[lenb];
}// 二维数组
void work() {for(int i=1; i<=lena; i++) dp[i][0] = i;for(int j=1; j<=lenb; j++) dp[0][j] = j;for(int i=1; i<=lena; i++)for(int j=1; j<=lenb; j++)if(a[i-1]==b[j-1])dp[i][j] = dp[i-1][j-1];elsedp[i][j] = min(dp[i-1][j-1], min(dp[i][j-1], dp[i-1][j]))+1;printf("%d\n", dp[lena][lenb]);
}int main() {read();work();int len = edit_distance(a, b);printf("%d\n", len);return 0;
}

参考

一维动态规划及优化(max subarray, sell stock, Climbing Stairs)
背包9讲一个不错的实现方案

由动态规划计算编辑距离引发的思考相关推荐

  1. 由一行文本输入框引发的思考

      文章是关于React组件之表单单行文本输入框的一些思考.可能大家第一反应都是,不就是一行<input/>嘛,没什么特别的吧?如果说到输入框的值的话,可能圈子里上大多数封装好的React ...

  2. 由SecureCRT引发的思考和学习

    由SecureCRT引发的思考和学习 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=2652500597&idx=1& ...

  3. C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质...

    C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质 事情的经过是这种,博主在用C写一个简单的业务时使用递归,因为粗心而忘了写return.结果发现返回的结 ...

  4. 由「Metaspace容量不足触发CMS GC」从而引发的思考

    转载自  由「Metaspace容量不足触发CMS GC」从而引发的思考 某天早上,毛老师在群里问「cat 上怎么看 gc」. 好好的一个群 看到有 GC 的问题,立马做出小鸡搓手状. 之后毛老师发来 ...

  5. 【汇编语言与计算机系统结构笔记01】x86/MIPS/ARM指令集概述与特性,一篇HPCA引发的思考(商业生态的决定性作用)

    资源Bilibili AV46914471 + AV57921488 汇编语言与计算机系统结构 清华大学 张悠慧 本次笔记内容: 01.汇编语言与计算机系统结构 02.汇编基础知识--指令集综述 文章 ...

  6. 一个分组查询引发的思考

    一个分组查询引发的思考 我们在看项目代码或者SQL语句时, 往往会看到很多非常复杂的业务或者SQL 那么问题来了. 复杂SQL是如何写成的? 下面通过一个数据展示的需求来体会到复杂的SQL是如何书写的 ...

  7. sql object_id() 对应oracle,关于ORACLE通过file_id与block_id定位数据库对象遇到的问题引发的思考...

    在ORACLE中,我们可以通过file_id(file#)与block_id(block#)去定位一个数据库对象(object).例如,我们在10046生成的trace文件中file#=4 block ...

  8. 动态规划求编辑距离 - 残阳似血的博客

    动态规划求编辑距离 - 残阳似血的博客 动态规划求编辑距离 - 残阳似血的博客 动态规划求编辑距离 位于分类 自然语言处理 这两天在写一个简单的单词拼写检查器(Spell checker),本来求编辑 ...

  9. 蓝桥杯 出栈顺序问题引发的思考以及递归的优化(缓存池)

    蓝桥杯 出栈顺序问题引发的思考以及递归的优化(缓存池) 关于递归的优化和思考 在我们IT圈内有句话,普通程序员用迭代,天才程序员用递归.诚然,递归确实能够将许多复杂的问题简化,但是问题来了,由于递归采 ...

最新文章

  1. Codeforces 900D Unusual Sequences:记忆化搜索
  2. 影响线型缩聚物分子量的因素_【CRPS】通过硼烷引发剂实现氧气引发的超高分子量聚合物的可控合成...
  3. 微软400集python课程-最强福利——来自微软的Python学习教程(开发指南)
  4. [bzoj3676] [APIO2014]回文串
  5. SilverLight4.0数据验证IDataErrorInfo, INotifyDataErrorInfo[转]
  6. MongoDB分布式(分片存储)部署
  7. LeetCode 1165. 单行键盘(哈希)
  8. Android中Bitmap和Drawable 总结
  9. VI3之vCenterServer配置的备份与还原
  10. pdfdom将pdf转成html,使用pdfdom将pdf转为html(示例代码)
  11. codevs 1164 统计数字
  12. POST的Response数据问题
  13. C语言程序设计学习心得体会总结
  14. 在envi做随机森林_【模型篇】随机森林模型(Random Forest)
  15. matlab语音信号的采集与处理,基于MATLAB的语音信号的采集与处理详解
  16. 打造可用的梅花6硬键盘
  17. 51单片机控制的收音机(带串口,遥控,芯片89S52+LC72131+LA1845N)
  18. 基于MATLAB的图片中文字的提取及识别
  19. ios沙箱模式开启_iOS的沙箱机制 是否应该清理后台
  20. js获取对象的父元素,子元素,兄弟元素

热门文章

  1. 一文吃透JAVA定时器格式
  2. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
  3. GCC 链接 xxx:No such file or directory 及运行可执行文件 error while loading shared libraries: xxx.so 解决方案
  4. Go 学习笔记(68)— goroutine 并发控制神器 Context
  5. 使用OneFlow搭建神经网络
  6. NSight Compute 用户手册(上)
  7. 深度学习模型训练过程
  8. php set medias,laravel5.1 -- Integrate FileManager and CKeditor into laravel
  9. C++ 获取内存地址(取值运算符)
  10. 播放此电影需要以下插件,但尚未安装: MPEG-4 AAC decoder