﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-王之昊的小屋-随笔分类-字符串</title><link>http://www.cppblog.com/Wangzhihao/category/15864.html</link><description>为了自己的梦想，每天要像小乐一样勤奋！</description><language>zh-cn</language><lastBuildDate>Tue, 11 Jan 2011 08:33:10 GMT</lastBuildDate><pubDate>Tue, 11 Jan 2011 08:33:10 GMT</pubDate><ttl>60</ttl><item><title>求两个正规式之间的编辑距离</title><link>http://www.cppblog.com/Wangzhihao/archive/2011/01/11/138338.html</link><dc:creator>王之昊</dc:creator><author>王之昊</author><pubDate>Tue, 11 Jan 2011 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/Wangzhihao/archive/2011/01/11/138338.html</guid><wfw:comment>http://www.cppblog.com/Wangzhihao/comments/138338.html</wfw:comment><comments>http://www.cppblog.com/Wangzhihao/archive/2011/01/11/138338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Wangzhihao/comments/commentRss/138338.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Wangzhihao/services/trackbacks/138338.html</trackback:ping><description><![CDATA[
<h1 align="center" style="text-align:center"><span lang="ZH-CN" style="font-family:
&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:windowtext">求两个正规式之间的编辑距离</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:windowtext"><o:p></o:p></span></h1>

<h1 align="right" style="text-align:right"><span lang="ZH-CN" style="font-size:
10.0pt;line-height:115%;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:windowtext;
font-weight:normal;mso-bidi-font-weight:bold">正规式与编辑距离都是常见知识，如果不熟悉请见原题</span><sup><span style="font-size:10.0pt;line-height:115%;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;
color:windowtext;font-weight:normal;mso-bidi-font-weight:bold">[1]</span></sup><span style="font-size:10.0pt;line-height:115%;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;
color:windowtext;font-weight:normal;mso-bidi-font-weight:bold"><o:p></o:p></span></h1>

<p class="MsoNormal" style="text-indent:.3in"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;"><o:p>&nbsp;</o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span lang="ZH-CN" style="font-family:
&quot;微软雅黑&quot;,&quot;sans-serif&quot;">两个字符串之间的编辑距离的经典解法是动态规划。然而正规式可能包含无穷多个字符串。 不好将它转化到两字符串的编辑距离上。另外一个问题，首先要有一种能够识别正规式的方法，就像进行表达式计算时，用递归下降方法来识别就很顺手。</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;"><o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span lang="ZH-CN" style="font-family:
&quot;微软雅黑&quot;,&quot;sans-serif&quot;">一时之间想不起用什么来表示正规式，后来看到解题报告<sup> </sup></span><sup><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">[2] </span></sup><span lang="ZH-CN" style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">才有恍然大悟的感觉，用一个</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">NFA<sup>[3]</sup><span lang="ZH-CN">来表示正规式（编译原理课上学过的，还是重点）。这样状态非常的清晰。</span><o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span lang="ZH-CN" style="font-family:
&quot;微软雅黑&quot;,&quot;sans-serif&quot;">首先将正规式转换成</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">NFA<span lang="ZH-CN">的形式，这样两个正规式，就变成了两个</span>NFA<span lang="ZH-CN">。设</span>&lt;x , y&gt;<span lang="ZH-CN">表示当前匹配到第一个</span>NFA<span lang="ZH-CN">的</span>x<span lang="ZH-CN">状态，第二个</span>NFA<span lang="ZH-CN">的</span>y<span lang="ZH-CN">状态所消耗的当前最少代价。对于当前的状态</span>&lt;s1, s2&gt;<span lang="ZH-CN">寻找他所有的后继</span>&lt;t1, t2&gt;<span lang="ZH-CN">，如果发现能够更新后继</span>&lt;t1,
t2&gt;,<span lang="ZH-CN">那么更新它，并且将它入队，用于更新其他的状态。当队列里空了时候，那么就求到了最小编辑距离。</span><o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span lang="ZH-CN" style="font-family:
&quot;微软雅黑&quot;,&quot;sans-serif&quot;">这里有个小技巧，就是标记当前状态是否已经在队列中，防止队列中出现重复状态。具体实现可以参考</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">UESTC_Melody<span lang="ZH-CN">的代码</span><sup>[4]</sup><span lang="ZH-CN">，写的非常优美。</span><o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;"><o:p>&nbsp;</o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span lang="ZH-CN" style="font-family:
&quot;微软雅黑&quot;,&quot;sans-serif&quot;">引用</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;"><o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">[1]<a href="http://acmicpc-live-archive.uva.es/nuevoportal/data/problem.php?p=5109"><span style="color:windowtext;text-decoration:none;text-underline:none">http://acmicpc-live-archive.uva.es/nuevoportal/data/problem.php?p=5109</span></a><o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">[2]
<a href="http://icpc.amrita.ac.in/2010/images/solution_logic.pdf"><span style="color:windowtext;text-decoration:none;text-underline:none">http://icpc.amrita.ac.in/2010/images/solution_logic.pdf</span></a><o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">[3]
<a href="http://en.wikipedia.org/wiki/Nondeterministic_finite_state_machine"><span style="color:windowtext;text-decoration:none;text-underline:none">http://en.wikipedia.org/wiki/Nondeterministic_finite_state_machine</span></a><o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:.3in"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">[4]
<a href="http://acm.hust.edu.cn:8080/judge/problem/viewSource.action?id=56951"><span style="color:windowtext;text-decoration:none;text-underline:none">http://acm.hust.edu.cn:8080/judge/problem/viewSource.action?id=56951</span></a><o:p></o:p></span></p>
<img src ="http://www.cppblog.com/Wangzhihao/aggbug/138338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Wangzhihao/" target="_blank">王之昊</a> 2011-01-11 16:21 <a href="http://www.cppblog.com/Wangzhihao/archive/2011/01/11/138338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>