动态规划解字符串编辑距离(C语言实现)

此为《算法的乐趣》读书笔记。

递归求解

递归算法简单优雅,分两种情况缩减规模:

#include
#include 

#define min(x,y)  ( x

动态规划

假设source有n个字符,target有m个字符,问题可定义为source[1...n]到target[1...n]的编辑距离。子问题可以定义为source前[1...i]到target前[1...j]的编辑距离(最优子结构)。因此,可以定义状态d[i,j]为从子串source[1...i]到子串target[1...j]之间的编辑距离。
状态递推关系方式分为两种情况,分别是source[i]等于target[j]和source[i]不等于target[j]:
d[i,j]=d[i-1,j-1] + 0; source[i]等于target[j]
d[i,j]=min(d[i,j-1]+1, d[i-1,j-1]+1, d[i-1,j]+1); source[i]不等于target[j]
边界条件:
d[i,0] = source字符串的长度
d[0,j] = target字符串的长度

#include
#include 

#define MAX_STRING_LEN 10 
#define min(x,y)  ( x

你可能感兴趣的:(动态规划,算法,c)