- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C匹配最长子字符串(能避开空格)
摘要随着信息化时代的到来,伴随着的是网络上大量的垃圾信息与屡禁不止,难辨真伪的抄袭现象,急需一种能够排除空格换行等干扰符号,求解最长公共子序列的一种高效算法,能够排查网上带空格回车的不良言语以及完成论文查重等事件。本人使用正则表达式巧妙地去除了字符串中的空格与换行符,使用C#语言完成了基于动态规划的最长公共子序列的求解,并使用两个程序对TXT文件和对DOC文件中字符串求解最长公共子序列。(ConsoleApplication3针对TXT文件,ConsoleApplication6针对DOC文件)目录实验设计及要求实验思路2.1刻画最长公共子序列的特征2.2一个递归解3. 实验内容及其步骤3.1去除字符串中的干扰符号(空格与换行符)3.2计算LCS的长度3.3构造LCS4. 测试运行5. 实验小结附录实验设计及要求使用某种语言先去除字符串中的空格与换行符,再完成基于动态规划的最长公共子序列的求解,并使用程序对文本文档中字符串求解最长公共子序列。实验思路2.1刻画最长公共子序列的特征子问题的自然分类对应两个输入序列的“前缀”对。前缀的严谨定义如下:给定一个序列X=x1,x2,...,xm,对i=0,1,...,m,定义X的第i前缀为Xi=x1,x2,...,xi。例如若X=A,B,C,B,D,A,B,则X4=A,B,C,B,X0为空串。定理15.1(LCS的最优子结构) 令X=x1,x2,...,xm和Y=y1,y2,...,yn为两个序列,Z=z1,z2,...,zk为X和Y的任意LCS。1.如果xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的一个LCS。2.如果xm≠yn,则zk≠xm意味着Z是Xm-1和Y的一个LCS。3.如果xm≠yn,则zk≠yn意味着Z是X和Yn-1的一个LCS。2.2一个递归解求X=x1,x2,...,xm和Y=y1,y2,...,yn的一个LCS时,我们需要求解一个或两个子问题。如果xm=yn,我们应该求解Xm-1和Yn-1的一个LCS。将xm=yn追加到这个LCS的末尾,就得到X和Y的一个LCS。如果xm≠yn我们必须求解两个子问题:求Xm-1和Y的一个LCS与X和Yn-1的一个LCS。两个LCS较长者即为X和Y的一个LCS。由于这些情况覆盖了所有可能性,因此我们知道必然有一个子问题的最优解出现在X和Y的LCS中。我们可以很容易看出LCS问题的重叠子问题性质。为了求X和Y的一个LCS,我们可能需要求X和Yn-1的一个LCS。但是这几个自问题都包含求解Xm-1和Yn-1的LCS的子子子问题。很多其他子问题也都共享子子问题。与矩阵链乘法问题相似,设计LCS问题的递归算法首先要建立最优解的递归式。我们定义c[i,j]表示Xi和Yi的LCS的长度。如果i=0或j=0,即一个序列长度为0,那么LCS的长度为0。根据LCS问题的最优子结构性质,可得如下公式: 0若i=0或j=0c[i,j]= c[i-1,j-1]+1 若i,j0且xi=yi max(c[i-1,j],c[i,j-1]) 若i,j0且xi≠yi 观察到在递归公式中,我们通过限制条件限定了需要求解那些子问题。当xi=yi时,我们可以而且应该求解子问题:Xi-1和Yj-1的一个LCS。否则,应该求解两个子问题:Xi和Yj-1的一个LCS及Xi-1和Yj的一个LCS。3. 实验内容及其步骤3.1去除字符串中的干扰符号(空格与换行符)将文件中字符串导入程序,分别存入两个字符串中,使用正则表达式Regex.Matches(X, [^ \n]+),将不包含空格与回车的字符串片段放入MatchCollection中,将片段拼接起来形成不含空格与回车的两个新字符串。源码如下:string X = File.ReadAllText(@.\1.txt); string Y = File.ReadAllText(@.\2.txt); MatchCollection v1 = Regex.Matches(X, [^ \n]+); MatchCollection v2 = Regex.Matches(Y, [^ \n]+); StringBuilder x1 = new StringBuilder(); StringBuilder x2 = new StringBuilder(); foreach (Match m1 in v1) { x1.Append(m1.Value); } foreach (Match m2 in v2) { x2.Append(m2.Value); } string x = +x1.ToString(); string y = +x2.ToString();3.2计算LCS的长度根据公式 0若i=0或j=0c[i
您可能关注的文档
最近下载
- 网络预约出租汽车企业安全生产责任制和事故报告制度.pptx
- SY-T 5051-2009 钻具稳定器-石油天然气行业标准.pdf VIP
- 22G101-3 混凝土结构施工图平面整体表示方法制图规则和构造详图(独立基础、条形基础、筏形基础、桩基础).docx
- 模板支架验收记录表.doc
- 标准个人租房合同模板.pdf VIP
- 2024年全国疾控系统大学习实验室质量控制规范答案.docx VIP
- 2024-2025学年初中道德与法治七年级(全一册)统编版(五四学制)(2024)教学设计合集.docx
- 小学劳动教育五年级下册第五单元2《维修凳子》教学设计.docx
- 北师大版五年级数学上册第五单元《分数的意义》(大单元教学设计).docx VIP
- 简易呼吸球囊.ppt
文档评论(0)