C++实现编辑距离算法详解

版权申诉
0 下载量 17 浏览量 更新于2024-11-09 收藏 834KB RAR 举报
资源摘要信息:"ED.rar_编辑距离" 编辑距离(Edit Distance)是一种衡量两个序列相似度的指标,也称为Levenshtein距离。它通过计算将一个字符串转换成另一个字符串所需的最少编辑操作次数来衡量字符串之间的差异。在计算机科学中,编辑操作通常包括插入、删除和替换字符。编辑距离的算法在自然语言处理、生物信息学以及文本校对等领域有着广泛的应用。 描述中提到的“程序实现”意味着本资源可能包含了使用C++语言编写的编辑距离计算程序。C++是一种静态类型、编译式、通用的编程语言,它支持多范式编程,包括过程化、面向对象和泛型编程。C++广泛用于系统软件、游戏开发、高性能服务器和客户端应用开发等领域。C++语言因其执行效率高、控制能力强而被选作实现编辑距离算法的工具。 编辑距离的计算可以通过动态规划(Dynamic Programming)来实现。动态规划是一种算法思想,用于解决具有重叠子问题和最优子结构特性的问题。在编辑距离的上下文中,动态规划算法可以构建一个矩阵,其中矩阵的每个元素表示两个字符串从开始到当前位置的最小编辑距离。通过填充这个矩阵,可以计算出整个字符串的编辑距离。 具体的C++实现可能会包括以下几个步骤: 1. 定义矩阵大小,矩阵的行数和列数分别对应两个字符串的长度加一。 2. 初始化矩阵的第一行和第一列,这些元素代表将一个空字符串转换为另一个字符串的编辑距离。 3. 逐个填充矩阵其余的元素,比较两个字符串当前字符是否相同: - 如果当前字符相同,则当前位置的编辑距离等于左上角元素的值。 - 如果当前字符不同,则当前位置的编辑距离是左、上、左上三个位置编辑距离中的最小值加一。 4. 最终填充完矩阵后,矩阵的右下角元素即为两个字符串的编辑距离。 例如,对于字符串"kitten"和"sitting",编辑距离计算步骤如下: 1. 初始化矩阵大小为7x8(分别对应"-"和字符串的长度加一)。 2. 填充第一行和第一列。 3. 逐个计算剩余元素,比如对于(k, s),因为字符不同,编辑距离为min(左, 上, 左上) + 1。 4. 填充完成后的右下角元素值即为两字符串的编辑距离。 标签中提到的“编辑距离”是对资源主要内容的高度概括,意味着用户可以预期这个资源将包含编辑距离的概念、算法以及可能的C++程序代码实现。 压缩包子文件的文件名称列表中只有一个文件名“ED”,表明这个压缩文件中包含了与编辑距离相关的文件。用户在解压缩后可以找到一个或多个文件,这些文件很可能包含了实现编辑距离算法的C++源代码文件(可能具有.cpp扩展名)、相关的头文件(.h或.hpp扩展名),以及其他可能的辅助文件,例如Makefile用于自动化编译过程,或者README.md文档说明如何使用这些代码。 总结起来,该资源为对编辑距离这一概念及其C++程序实现感兴趣的学习者提供了一个宝贵的参考。学习者可以通过探索这个资源来加深对编辑距离算法原理的理解,并学习如何在C++中实现这一算法,进而将其应用于实际问题的解决中。

JDBC Connection [org.postgresql.jdbc.PgConnection@49f1bf43] will not be managed by Spring ==> Preparing: select z.*,y.PDTCLASS_CLASS FROM ( SELECT * FROM (SELECT r.PDT_PLANEX_PDTID,r.PDT_PLANEX_TYPE ,r.SUM_NUM,e.SUM_NUM2,e.COUNT_NUM FROM (SELECT SUM(t.PDT_PLANEX_NUM) as SUM_NUM,t.PDT_PLANEX_PDTID,t.PDT_PLANEX_TYPE FROM c_pdt_plan_ex t WHERE t.PDT_PLANEX_DELETED = 0 and t.DATA_FROM = ? and to_timestamp(?, 'yyyy-MM-dd HH:mm:ss.SSS') >= t.PDT_PLANEX_BEGIN and t.PDT_PLANEX_END >= to_timestamp(?, 'yyyy-MM-dd HH:mm:ss.SSS') GROUP BY t.PDT_PLANEX_PDTID,t.PDT_PLANEX_TYPE )r LEFT JOIN (SELECT SUM(o.WEISHT_NET_WGHT) SUM_NUM2,COUNT(1) COUNT_NUM,o.PDTINF_PDT,o.PDTINF_CLASS,o.PDT_PLANEX_PDTID,o.PDT_PLANEX_TYPE FROM(SELECT * FROM(SELECT * FROM (SELECT q.*, p.* FROM ( SELECT t.PDT_PLANEX_ID, t.PDT_PLANEX_NUM, t.PDT_PLANEX_PDTID, t.PDT_PLANEX_TYPE, t.PDT_PLANEX_BEGIN, t.PDT_PLANEX_END, t.PDT_PLANEX_COID FROM c_pdt_plan_ex t WHERE t.PDT_PLANEX_DELETED = 0 and t.DATA_FROM = ? and to_timestamp(?, 'yyyy-MM-dd HH:mm:ss.SSS') >= t.PDT_PLANEX_BEGIN and t.PDT_PLANEX_END >= to_timestamp(?, 'yyyy-MM-dd HH:mm:ss.SSS') GROUP BY t.PDT_PLANEX_PDTID, t.PDT_PLANEX_COID, t.PDT_PLANEX_TYPE, t.PDT_PLANEX_BEGIN, t.PDT_PLANEX_END, t.PDT_PLANEX_COID ) q LEFT JOIN (SELECT PDTINF_PDT, PDTINF_ID , PDTINF_CLASS FROM c_products_info WHERE PDTINF_DELETED=0 and DATA_FROM = ? )p on q.PDT_PLANEX_PDTID=p.PDTINF_ID)k LEFT JOIN (select g.CPY_CO,g.CPY_ID from c_companys g where CPY_DELETED=0 and DATA_FROM = ? ) c ON k.PDT_PLANEX_COID=c.CPY_ID)k inner JOIN (select j.WEISHT_NET_WGHT,j.WEISHT_PRODUCT,j.WEISHT_CO,j.WEISHT_EMPTY_TM,j.WEISHT_FULL_TM from c_weight_sheets j where WEISHT_DELETED = 0 and DATA_FROM = ? )r ON k.PDTINF_PDT=r.WEISHT_PRODUCT and k.CPY_CO=r.WEISHT_CO AND k.PDT_PLANEX_BEGIN <= r.WEISHT_FULL_TM AND k.PDT_PLANEX_END >= r.WEISHT_FULL_TM ORDER BY k.PDTINF_PDT )o GROUP BY o.PDT_PLANEX_PDTID)e ON e.PDT_PLANEX_PDTID=r.PDT_PLANEX_PDTID AND e.PDT_PLANEX_TYPE=r.PDT_PLANEX_TYPE)w left join (SELECT PDTINF_PDT, PDTINF_ID , PDTINF_CLASS FROM c_products_info WHERE PDTINF_DELETED=0 and DATA_FROM = ? )p on w.PDT_PLANEX_PDTID=p.PDTINF_ID) z left join (select PDTCLASS_CLASS,PDTCLASS_ID from c_pdt_class where PDTCLASS_DELETED=0) y on z.PDTINF_CLASS=y.PDTCLASS_ID ==> Parameters: e9f6ed8e091611ec842700163e092c06(String), 2023-10-08 23:59:59(String), 2020-10-08 23:59:59(String), e9f6ed8e091611ec842700163e092c06(String), 2023-10-08 23:59:59(String), 2020-10-08 23:59:59(String), e9f6ed8e091611ec842700163e092c06(String), e9f6ed8e091611ec842700163e092c06(String), e9f6ed8e091611ec842700163e092c06(String), e9f6ed8e091611ec842700163e092c06(String) Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57f98196] [2023-06-01 21:16:02] [ERROR] -- Servlet.service() for servlet [dispatcherServlet] in context with path [/szIntranetweb] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: org.postgresql.util.PSQLException: 错误: 字段 "t.pdt_planex_id" 必须出现在 GROUP BY 子句中或者在聚合函数中使用

2023-06-02 上传