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

源码交易平台网站源码看b站视频下载软件

源码交易平台网站源码,看b站视频下载软件,5g网络架构图,商城网站建设目录 一、最大子段和 1、什么是最大子段和 2、暴力枚举 3、分治法 4、动态规划 二、最长公共子序列 1、什么是最长公共子序列 2、暴力枚举法 3、动态规划法 4、完整代码 一、最大子段和 1、什么是最大子段和 子段和就是数组中任意连续的一段序列的和,而…

目录

一、最大子段和

1、什么是最大子段和

2、暴力枚举

3、分治法

4、动态规划

二、最长公共子序列

1、什么是最长公共子序列

2、暴力枚举法

3、动态规划法

4、完整代码 


 

一、最大子段和

1、什么是最大子段和

        子段和就是数组中任意连续的一段序列的和,而最大子段和就是寻找子段和里最大的一个值。下面的解释中S[l,r]会用来表示l到r的子段和,l和r分别表示左值和右值。

        最大子段和一般有三种解决方案:暴力枚举法分治法动态规划法。下面将逐个介绍。

758a27854af049a2a71061694f22f443.png

2、暴力枚举

        暴力枚举就是遍历所有的子段和,寻找最大的子段和,时间复杂度eq?O%28n%5E3%29 。相对无脑,直接贴上代码。

    //暴力枚举法public static int maxsize_violate(ArrayList<Integer>arr,int left, int right){int max=-99999999;for(int i=left;i<=right;i++){int sum=0;for(int j=i;j<=right;j++){for(int k=i;k<=j;k++){sum+=arr.get(k);  //最大值来源}if(sum>max)max=sum;sum=0;}}return max;}

3、分治法

        将每个问题分解为三个小问题,左一半的子段和,右一半的子段和,(必须)跨区域的子段和。

        伪代码如下,可以看到左子段和与右子段和都是递归求解(3、4),跨区域的一定是左右两个子段和最大值的和(5、6、7),最后选择左子段和、右子段和、跨域子段和中最大的子段和(8、9)。

52b99b166ac14860a4ebc9626c2891af.png

        完整代码:

    //分治法public static int maxsize(ArrayList<Integer>arr, int left, int right){int sum=0,midSum=0,leftSum=0,rightSum=0;int center,s1,s2,lefts,rights;//左右相等,返回左值if (left==right){    sum=arr.get(left);}//否则,分治法else {center=(left+right)/2;leftSum=maxsize(arr,left,center);         //left,l+r/2     //左区间最大值rightSum=maxsize(arr,center+1,right);     //l+r/2+1,right  //右区间最大值//后面都是在计算跨区域最大值(必须跨区域),一定是左区间贴近边界的最大值加右区间贴近边界的最大值相加。s1=0;lefts=0;                             //s1存左侧区间最大值,lefts作为tempfor (int i=center;i>=left;i--){lefts+=arr.get(i);if (lefts>s1){s1=lefts;}}s2=0;rights=0;                             //s2存右侧区间最大值,rights作为temp               for (int j=center+1;j<=right;j++){rights+=arr.get(j);if (rights>s2){s2=rights;}}midSum=s1+s2;                              //中间跨域的等于左侧加右侧的if (midSum<leftSum){sum=leftSum;}else {sum=midSum;}if (sum<rightSum){sum=rightSum;}}return sum;}

4、动态规划

        动态规划法是自底向上推导,假设eq?a_i为第i个数,eq?b_i为包含最后一个数eq?a_i的连续子段和,sum为最大子段和。

        建立于下面图这个关系,假设已经有eq?a_ieq?a_%7Bj-1%7D的子段和eq?b_%7Bj-1%7D,那么加入后一个eq?a_j生成eq?b_j只有两种可能:

(1)eq?b_%7Bj-1%7D%5Cleqslant%200,那么eq?b_j%3Da_j

(2)eq?b_%7Bj-1%7D%3E0,那么eq?b_j%3Db_%7Bj-1%7D&plus;a_j

        对于eq?1%5Cleqslant%20j%5Cleqslant%20n的每一个eq?b_j,都要与sum取最大值,保证sum为eq?b_1eq?b_j中最大的值,返回sum。

5728b43fe8a94a65a0115e6a832184b9.png

        完整代码: 

    //动态规划法public static int maxsum(ArrayList<Integer>arr, int n){int sum=-999999;int b=0;for(int i=0;i<=n;i++){if(b>0)b+=arr.get(i);else    b=arr.get(i);if(b>sum)sum=b;}return sum;}

二、最长公共子序列

1、什么是最长公共子序列

        子序列是指序列中任意不一定连续但顺序的若干个字符组成的序列。如下图中Z1={B,C,A}为X的子序列,B,C,A三个字符在X中顺序出现,且不一定连续。

        公共子序列就是指两个序列之间存在一个共同的子序列,而我们就是要找到最长的一个公共子序列。

9afd433e7cc5406bb74eed774fad9691.png

2、暴力枚举法

        暴力枚举法,不仅占用了相当大的内存存放所有子序列,和所有公共子序列,而且浪费了巨大的时间,时间复杂度指数级eq?O%28n2%5Em%29

fd264a432b4541b988ab67a2838ec25e.png

3、动态规划法

        动态规划法仍然是这种自底向上的算法,讨论前一项的最长公共子序列通过比较两个序列下一个值,判定是否进入子序列。动态规划法的时间复杂度为O(mn)

554b804b5a8344cbb0c62269cd2029cf.png

        使用c[i][j]数组记录eq?x_jeq?y_j的最长公共子序列长度, b[i][j]数组记录子序列的产生情况。c数组存在下面的递归结构成立,与b数组的关系如下,根据这个递推式,可以写出c和b数组的生成函数。

9e797ea0c8e84be5a0f1caeffb7a2336.png

c[i][j]=c[i-1][j-1]+1

b[i][j]=1               

↖                  

c[i][j]=c[i-1][j]

b[i][j]=2

c[i][j]=c[i][j-1]

b[i][j]=3

 

如何构造最长子序列?

         就是根据b数组的指引,倒推子序列,所有b[i][j]=1,也就是b数组指引为左上箭头的,都是公共序列的值,将他们按顺序串接就得到了最大子序列。

cdd4e6e80b68495583118cc6db6aeb6c.png

        注意一个问题,X序列是y轴方向的,Y序列是x轴方向的。 

4、完整代码

//最长公共子序列
import java.util.Scanner;
public class LCS {public static void main(String [] args){String x=new Scanner(System.in).nextLine();String y=new Scanner(System.in).nextLine();int m=x.length();int n=y.length();int [][]c=new int[m+1][n+1];int [][]b=new int[m+1][n+1];LCSLength(x, y, c, b);for(int i=0;i<m+1;i++){for(int j=0;j<n+1;j++){System.out.print(c[i][j]);System.out.print("\t");}System.out.println("");}BuildLCS(m,n,x,b);}//最长公共子序列生成c和b数组public static void LCSLength(String x,String y,int [][]c,int [][]b){int i,j;int m=x.length();int n=y.length();for(i=0;i<m+1;i++)c[i][0]=0;for(i=0;i<n+1;i++)c[0][i]=0;for(i=1;i<m+1;i++){for(j=1;j<n+1;j++){if(x.charAt(i-1)==y.charAt(j-1)){c[i][j]=c[i-1][j-1]+1;b[i][j]=1;}else if(c[i-1][j]>=c[i][j-1]){c[i][j]=c[i-1][j];b[i][j]=2;}else{c[i][j]=c[i][j-1];b[i][j]=3;}}}}//构造最长公共子序列public static void BuildLCS(int i,int j,String x,int[][]b){if(i==0|j==0){return;}if(b[i][j]==1){BuildLCS(i-1, j-1, x, b);System.out.print(x.charAt(i-1));}else if(b[i][j]==2){BuildLCS(i-1,j,x,b);}else{    BuildLCS(i, j-1, x, b);}}
}

 

 

http://www.dt0577.cn/news/33142.html

相关文章:

  • 郑州公交app宝鸡百度seo
  • 精品网站建设需要多少钱百度站长中心
  • 企业网站建设运营自建站怎么推广
  • 工业网站建设百度竞价推广流程
  • 网站设计运行费用关键词优化公司电话
  • 网站推广的分类现在推广引流什么平台比较火
  • 美橙西安网站备案拍照企业推广是什么职业
  • 怎么做同学录的网站开发一款app软件需要多少钱
  • 视频聚合网站怎么做不侵权美国新冠疫情最新消息
  • b2c网站建设费用如何做到精准客户推广
  • 做设备开通哪个网站好网络seo
  • 赤峰微网站建设在哪里打广告效果最好
  • 新疆建设兵团五师87团网站seo优化网站源码
  • .net asp可以外链其它网站吗百度商家版下载
  • 嘉峪关市建设路小学新闻网站源云推广
  • 苏州做网站外包的公司朋友圈广告投放价格表
  • 做网站什么语言好淄博网站制作
  • 网站项目怎么做计划网上营销怎么做
  • 临清网站建设服务交易平台官网
  • 郑州网站优化平台seo研究中心怎么了
  • wordpress可以装多少会员数据库网络网站推广优化
  • 安徽政府网站建设西安网站建设推广
  • 莱州市做网站的公司找seo外包公司需要注意什么
  • 临沂做网站关键词优化排名首页
  • WordPress禁用代码编辑器杭州seo外包服务
  • wordpress 缩略图百度seo技术
  • 哪些网站可以做商家大连今日新闻头条
  • 开源网站建设实习心得seo推广效果
  • vs做网站案例谷歌浏览器chrome官网
  • 个人网站做百度云电影链接犯法吗软文素材