当前位置: 首页 > news >正文

网站设计方案范本建设工程施工合同的特点

网站设计方案范本,建设工程施工合同的特点,做网站相册,网站整站源码下载工具一、作用 最长公共子序列的问题常用于解决字符串的相似度#xff0c;是一个非常实用的算法#xff0c;作为码农#xff0c;此算法是我们的必备基本功。 二、概念 举个例子#xff0c;cnblogs 这个字符串中子序列有多少个呢#xff1f;很显然有 27 个#xff0c;比如其…一、作用 最长公共子序列的问题常用于解决字符串的相似度是一个非常实用的算法作为码农此算法是我们的必备基本功。 二、概念 举个例子cnblogs 这个字符串中子序列有多少个呢很显然有 27 个比如其中的 cb,cgs 等等都是其子序列我们可以看出子序列不见得一定是连续的连续的那是子串。 我想大家已经了解了子序列的概念那现在可以延伸到两个字符串了那么大家能够看出cnblogs 和 belong 的公共子序列吗 在你找出的公共子序列中你能找出最长的公共子序列吗 三、解决方案 1 枚举法 这种方法是最简单也是最容易想到的当然时间复杂度也是龟速的我们可以分析一下刚才也说过了cnblogs的子序列个数有27个 延伸一下一个长度为N的字符串其子序列有2N个每个子序列要在第二个长度为N的字符串中去匹配匹配一次需要O(N)的时间总共也就是O(N*2N)可以看出时间复杂度为指数级恐怖的令人窒息。 2 动态规划 既然是经典的题目肯定是有优化空间的并且解题方式是有固定流程的这里我们采用的是矩阵实现也就是二维数组。 第一步先计算最长公共子序列的长度。 第二步根据长度然后通过回溯求出最长公共子序列。 现有两个序列 X{x1,x2,x3…xi}Y{y1,y2,y3…yi}设一个 C[i,j]: 保存 Xi 与 Yj 的 LCS 的长度。 递推方程为 不知道大家看懂了没动态规划的一个重要性质特点就是解决“子问题重叠”的场景可以有效的避免重复计算根据上面的公式其实可以发现 C[i,j]一直保存着当前(Xi,Yi)的最大子序列长度。 using System;namespace ConsoleApplication2{public class Program{static int[,] martix;static string str1 cnblogs;static string str2 belong;static void Main(string[] args){martix new int[str1.Length 1, str2.Length 1];LCS(str1, str2);//只要拿出矩阵最后一个位置的数字即可Console.WriteLine(当前最大公共子序列的长度为:{0}, martix[str1.Length, str2.Length]);Console.Read();}static void LCS(string str1, string str2){//初始化边界过滤掉0的情况for (int i 0; i str1.Length; i)martix[i, 0] 0;for (int j 0; j str2.Length; j)martix[0, j] 0;//填充矩阵for (int i 1; i str1.Length; i){for (int j 1; j str2.Length; j){//相等的情况if (str1[i - 1] str2[j - 1]){martix[i, j] martix[i - 1, j - 1] 1;}else{//比较“左边”和“上边“根据其max来填充if (martix[i - 1, j] martix[i, j - 1])martix[i, j] martix[i - 1, j];elsemartix[i, j] martix[i, j - 1];}}}}}}图大家可以自己画一画代码完全是根据上面的公式照搬过来的长度的问题我们已经解决了这次要解决输出最长子序列的问题我们采用一个标记函数 Flag[i,j]当 ①C[i,j]C[i-1,j-1]1 时 标记 Flag[i,j]“left_up”; 左上方箭头 ②C[i-1,j]C[i,j-1] 时 标记 Flag[i,j]“left”; 左箭头 ③: C[i-1,j]C[i,j-1] 时 标记 Flag[i,j]“up”; 上箭头 例如我输入两个序列 XacgbfhkYcegefkh。 using System;namespace ConsoleApplication2{public class Program{static int[,] martix;static string[,] flag;static string str1 acgbfhk;static string str2 cegefkh;static void Main(string[] args){martix new int[str1.Length 1, str2.Length 1];flag new string[str1.Length 1, str2.Length 1];LCS(str1, str2);//打印子序列SubSequence(str1.Length, str2.Length);Console.Read();}static void LCS(string str1, string str2){//初始化边界过滤掉0的情况for (int i 0; i str1.Length; i)martix[i, 0] 0;for (int j 0; j str2.Length; j)martix[0, j] 0;//填充矩阵for (int i 1; i str1.Length; i){for (int j 1; j str2.Length; j){//相等的情况if (str1[i - 1] str2[j - 1]){martix[i, j] martix[i - 1, j - 1] 1;flag[i, j] left_up;}else{//比较“左边”和“上边“根据其max来填充if (martix[i - 1, j] martix[i, j - 1]){martix[i, j] martix[i - 1, j];flag[i, j] left;}else{martix[i, j] martix[i, j - 1];flag[i, j] up;}}}}}static void SubSequence(int i, int j){if (i 0 || j 0)return;if (flag[i, j] left_up){Console.WriteLine({0}: 当前坐标:{1},{2}, str2[j - 1], i - 1, j - 1);//左前方SubSequence(i - 1, j - 1);}else{if (flag[i, j] up){SubSequence(i, j - 1);}else{SubSequence(i - 1, j);}}}}}好我们再输入两个字符串 static string str1 abcbdab; static string str2 bdcaba;通过上面的两张图我们来分析下它的时间复杂度和空间复杂度。 **时间复杂度**构建矩阵我们花费了 O(MN)的时间回溯时我们花费了 OMN)的时间两者相加最终我们花费了 O(MN)的时间。 **空间复杂度**构建矩阵我们花费了 O(MN)的空间标记函数也花费了 O(MN)的空间两者相加最终我们花费了 O(MN)的空间。
http://www.w-s-a.com/news/439253/

相关文章:

  • 网站建设销售职责手机网站制作软件
  • 福州百度企业网站seo如何在电脑上登录wordpress
  • 开发区全力做好网站建设网络广告营销成功案例
  • 114网站建设高并发系统架构
  • php网站打开一片空白wordpress中文广告插件下载
  • 怎样建自己的网站免费的百度关键词排名点击
  • 医院网站建设的特点怎么查看网站百度快照
  • 网站 如何备案一般网站开发公司
  • 做网站的公司 贵阳郑州新像素ui设计培训收费
  • 温州网站建设公司电话给个免费的网址
  • 个人做电子商务网站备案软考高级
  • 淘宝客需要自己做网站吗四川遂宁做网站的公司
  • 编写网站策划书缘魁上海网站建设
  • 梧州外贸网站推广设计wordpress 上传 七牛
  • 增加网站备案千灯做网站
  • 深圳做网站的公php做简易网站
  • 徐州哪家做网站好商业空间设计效果图
  • 重庆建网站cqiezscom大学毕业做网站插画师好吗
  • 在门户网站做产品seo怎么样做网站管理员
  • 动画做视频在线观看网站字体安装+wordpress
  • vs2015网站开发做珠宝建个网站推广怎么样
  • 大桥外语官方网站星做宝贝佛山微信网站开发
  • 河南建设网站公司哪家好怎样做一家网站
  • 安阳市哪里做网站建设网站流量怎么赚钱
  • 网站开发与优化课程总结软件班级网站建设
  • py网站开发wordpress 公司网站 模板 下载
  • 长春城乡建设部网站首页英文网站推广服务
  • wordpress实训上海整站seo
  • 福建自己建设网站义乌市企推网络科技有限公司
  • 宁波优化网站哪家好织梦网站地图怎么做