| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法分析:C语言实现动态规划之最长公共子序列 -> 正文阅读 |
|
[数据结构与算法]算法分析:C语言实现动态规划之最长公共子序列 |
最长公共子序列问题: ????????下面的简单问题说明了动态规划的基本原理。在字母表一∑上,分别给出两个长度为n和m的字符串A和B,确定在A和B中最长公共子序列的长度。这里,A = a?a?...an。的子序列是一个形式为a?ka?k...aik的字符串,其中每个i都在1和n之间,并且1<i?< i?<…<ik≤n。例如,如果∑= {x, y,z},A = zxyxyz和B= xyyzx,那么xzy 同时是A和B的长度为3的子序列。然而,它不是A和B最长的公共子序列,因为字符串xyyz也是A和B公共的子序列,由于这两个字符串没有比4更长的公共子序列,因此,A和B的最长的公共子序列的长度是4 ????????解决这个问题的-一种途径是蛮力搜索的方法:列举A所有的2^n个子序列,对于每一个子序列在O( m)时间内来确定它是否也是B的子序列。很明显,此算法的时间复杂性是O时间复杂度(m22),是指数复杂性的。 ????????为了使用动态规划技术,我们首先寻找--个求最长公共子序列长度的递推公式,令A = a?a?...an和B= b?b?...bm,令L[i,j]表示a?a?...ai和b?b?...bj的最长公共子序列的长度。 ????????注意、i和j可能是0,此时,a?a?...ai和b?b?...bj中的一个或同时可能为空字符串。即如果i =0或 j =o,那么L[i,j]=0。很容易证明下面的观察结论。 ????????如果i和j都大于0,那么 ? ? ? ? 1.若ai=bj, L[i,j]= L[ i-1,j - 1]+1; ·? ? ? ? 2.若ai≠bj, L[i,j ]= max{L[i,j - 1],L[ i- 1,j] }。 最长公共子序列算法伪码: ? ?最长公共子序列公式: ? ?最长公共子序列解题思想:
核心代码就那几行:
将数据一步一步的带入代码就可以理解了! ?代码实现:
结果实现:? ? 希望这对你有帮助!? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:31:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |