精华内容
下载资源
问答
  • 求最长公共子序列长度
    千次阅读
    2019-03-15 21:06:37

    求两个字符串的公共子序列


    1.求最长公共子序列(子序列可以不连续)

    这是一道动态规划题,设二维数组dp[i][j],dp[i][j]表示a串前i个字符(包括第i个)与b串前j个字符(包括第j个)所有的公共子序列的最长长度。
    例如,a串abbcd,b串abcd,dp[3][3]就表示的a的前三个字符与b的前三个字符的最长公共子序列长度,值为2。a串中的ab与b串中的ab一致,长度为2。
    求dp数组的方法为:
    dp[i][j] = 0 , i == 0 || j == 0
    dp[i][j] = dp[i-1][j-1] +1 , a[i] = b[j]
    dp[i][j] = max(dp[i-1][j],dp[i][j-1]) , a[i] !=b[j]

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main(){
        string a,b;
        cin>>a>>b;
        int alen = a.size();
        int blen = b.size();
        int dp[100][100];
        for(int i=0;i<alen+1;i++) dp[i][0]=0;   //若i==0或j==0
        for(int j=0;j<alen+1;j++) dp[0][j]=0;  //dp[i][j] = 0
        for(int i=1;i<alen+1;i++){
            for(int j=1;j<blen+1;j++){
                if(a[i-1]==b[j-1]){
                    dp[i][j] = dp[i-1][j-1] +1;
                }else{
                	dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
                }
                cout<<dp[i][j]<<"  ";   //输出当前dp矩阵
            }
        }
        cout<< dp[alem][blen];       //dp[alem][blen]即为当前两个串的最长公共子序列长度
    }
    
    

    2.最长连续子串

    求最长连续子串比不连续的简单了一些,只需删除上边代码里的else部分即可,这里的dp[i][j]可以理解为以a的第i个字符与b的第j个字符为结尾的最长公共子串的长度,由此可得a[i] != b[j]时,dp[i][j] = 0

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main(){
        string a,b;
        cin>>a>>b;
        int alen = a.size();
        int blen = b.size();
        int dp[100][100];
        int Max=0;
        for(int i=0;i<alen+1;i++) dp[i][0]=0;
        for(int j=0;j<alen+1;j++) dp[0][j]=0;
        for(int i=1;i<alen+1;i++){
            for(int j=1;j<blen+1;j++){
                if(a[i-1]==b[j-1]){
                    dp[i][j] = dp[i-1][j-1] +1;
                }
                cout<<dp[i][j]<<"  ";
                if(dp[i][j]>Max)
                    Max = dp[i][j];     //保存数组里的最大值
            }
            cout<<endl;
        }
        cout<< Max;
    
    }
    
    
    更多相关内容
  • 这个m文件生成了所有长度为31的m序列。为了生成长度为31的m序列,我们使用5次原始多项式。5次原始多项式有3个,所以会有3个不同的m序列长度 31。
  • 求两个不同长度序列的循环卷积
  • 本文利用m序列的伪随机性质,研究了广义自缩序列的游程长度,得到如下结果:广义自缩序列族中除两个序列(全0序列和全1序列)外,其余序列的游程长度不超过n×n-2.5n+3,在n为偶数的情况下,游程长度不超过n×n/2-1.25n+3.
  • 求最长上升子序列长度和输出序列

    千次阅读 2019-05-09 22:21:48
    最长上升子序列 求最长上升子序列,并输出最长子序列。此文解释两种方法,dp和二分算法。并详细解释了输出最长子序列的过程。且代码精短易懂

    最长上升子序列
    Special Judge

    Description
    求最长上升子序列。

    Input
    单测试用例。
    第一行是一个正整数n,0 < n ≤ 3000
    第二行是n个非负整数。

    Output
    两行结果。
    第一行是最长上升子序列的长度。
    第二行是任意一个最长上升子序列,每个整数后面跟一个空格。

    Sample Input

    8
    5 2 8 6 3 6 9 7
    

    Sample Output

    4
    2 3 6 7
    

    由于本人语言组织能力差,要详细学习最长上升子序列的知识请点击下面链接:
    https://www.cnblogs.com/GodA/p/5180560.html

    注意如果是 最长非降序子序列,它们的区别是 最长非降序子序列中可以有相等的数。

    解决方法:

    方法一:直接DP没有用栈优化记忆序列的方法的用到两个for循环(复杂度n^2)

    方法二:用了栈优化记忆序列+二分查找的方法不仅比较快(因为用于储存的栈一直在维护升序,因此可以用二分查找(二分查找复杂度是log2(n))因此该方法的总复杂度是n*log2(n)(注意栈里面储存的不是最长子序列的序列
    现给出主函数:

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int a[3005];
    int main(void)
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	scanf("%d",&a[i]);
    	//DP();
    	serch(); 
    	return 0;
    }
    

    方法一:
    需要知道的是:数组d[i]就是找以a[i]结尾的,在a[i]之前的最长上升子序列+1,当a[i]之前没有比a[i]更小的数时,d[i]=1。所以所有的d[i]里面最大的那个就是最长上升子序列。

    int dp[3005]={0};
    void DP()
    {
    	int maxz=1;
    	for(int i=1;i<=n;i++){
    		dp[i]=1;
    		for(int j=1;j<i;j++){
    			if(a[i]>a[j])
    			{
    				dp[i]=max(dp[j]+1,dp[i]);
    				maxz=max(maxz,dp[i]);
    			}
    		}
    	}
    	printf("%d\n",maxz);
    	return;
    }
    

    二分算法;

    void serch()
    {
    	int j,len=1;
    	int d[3005];
    	d[1]=a[1];
    	for(int i=2;i<=n;i++){
    		if(a[i]>d[len])
    		{ 
    			d[++len]=a[i];
    		}
    		else
    		{
    			j=lower_bound(d+1,d+1+len,a[i])-d;//二分算法在这里
    			d[j]=a[i];
    		}
    	}
    	printf("%d\n",len);
    	/*for(int i=1;i<=len;i++)
    	printf("%d ",d[i]);//输出的序列不是最长子序列的序列,d里面替换的含义就是 
    	printf("\n");*/ //让后续有更大机会成为更长的上升子序列 -->自己取个名字就是可能栈 
    }//d它的长度就是最长上升子序列的长度
    

    其中的lower_bound()函数是c++STL函数,它的作用是从已排好序(从小到大)的序列a中利用二分查找找出指向满足ai>=k的ai的最小指针(比自己写函数就方便多啦)

    如果是 最长非降序子序列 那么把if()改为if(a[i]>=d[len])并把
    lower_bound(d+1,d+1+len,a[i])-d;改为upper_bound(d+1,d+1+len,a[i])-d;

    如果要输出其中一个最长子序列的序列,只需把第一种方法改进一下就行了:

    void DPandoutput()
    {
    	int posdp,pos=1;
    	for(int i=1;i<=n;i++){
    		dp[i]=1;
    		for(int j=1;j<i;j++){
    			if(a[i]>a[j])
    			{
    				dp[i]=max(dp[j]+1,dp[i]);
    				if(dp[i]>=maxz)
    				pos=i;//记录最后一个且最靠后的最长上升子序列的位置(加个等于就是使最后一个数尽可能的小) 
    				maxz=max(maxz,dp[i]);
    			}
    		}
    	}
    	printf("%d\n",maxz);
    	posdp=maxz;
    	s[1]=a[pos];
    	int count=1;
    	for(int i=pos-1;i>=1;i--){
    		if(dp[i]==posdp-1)
    		{
    			s[++count]=a[i];//记录下每次最长上升子序列长度变化的位置i,然后
    			posdp=dp[i];
    		}
    	}
    	for(int i=count;i>=1;i--)
    	printf("%d ",s[i]);//输出即可
    	printf("\n");
    	return;
    }
    

    方法:我们在计算最长上升子序列的长度时,我们先记录最后一个且最靠后的最长上升子序列的位置,之后从这个位置由后向前遍历记录下每次最长上升子序列长度变化的位置i存入数组中,然后输出这个数组即可。

    展开全文
  • 使用perl计算fasta序列长度

    千次阅读 2018-12-03 17:34:01
    Fasta序列长度的计算的原理就是将不同染色体长度存入哈希,最后用length去计算哈希元素的长度。 perl脚本如下: #!/usr/bin/env perl use strict; my($name, %seq ); open IN, $ARGV[0]; die “Need the inut ...

    Fasta序列长度的计算的原理就是将不同染色体长度存入哈希,最后用length去计算哈希元素的长度。

    perl脚本如下:

    #!/usr/bin/env perl
    use strict;
    
    my($name, %seq );
    open IN, $ARGV[0];
    die "Need the input fasta." if( ! defined $ARGV[0] );
    while(<IN>){
            chomp;
            if( /^>(\S+)/ ){			#匹配染色体的名字
                    $name = $1;
            }
            else{
                    $seq{$name} .= $_;
            }
    }
    close IN;
    
    print "[ INFO ] Length Infomation:\n\n";
    foreach$name(sort{$a cmp $b} keys %seq ){
            print "Name: ".$name."\tLength: ".length($seq{$name})."\n";
    }
    print "\n";
    

    比如,我将上述代码写入length文件,并chmod a+x 给length文件命令,给length文件添加可执行权限,我们就可以直接运行以下命令:
    计算油菜基因组染色体长度

    展开全文
  • 在最近使用excel的数据验证功能时,选择序列,字数的长度是有限制的

         在定制系统输入的模板时,使用到excel的数据验证功能,用到的可选项比较多,超出了序列的长度,需要处理换一种读取的方式。这里记录下来,方便备查。
         为了防止数据录入错误,方便数据库数据的匹配,直接在下拉菜单中选择对应的项目即可。如下图所示。
    在这里插入图片描述

    第一步、数据验证

    选中需要选择的列,数据 --> 数据验证,选择第一个数据验证选项,进行设置。
    在这里插入图片描述

    第二步、设置验证条件

    主要分为两种情况

    第一种

    选择 允许序列来源:即输入需要选择的内容,各选项用逗号隔开。注意:序列的长度是有限制,超过会无法进行保存。
    在这里插入图片描述

    第二种

    对于选项比较多的,如国籍,出生地等码值多的,设置其为选项也无法写到序列中,怎么处理呢?将选项放到一列,设置公式来读取这列做为选项。
    有两种方式:放在同一个sheet和单独存放带一个sheet中。
    1、将选项放到同一个sheet
    在这里插入图片描述
    在同一个sheet中可以选中该列,右键 – > 隐藏,即不显示H列

    2、将选项放到其他sheet
    在这里插入图片描述
    注意:设置的公式有所区别,需要有sheet的信息,参照下图所示。
    在这里插入图片描述

    $ 在excel中的作用:
    excel 单元格有绝对引用、相对引用和混合引用,均用 $ 表示,三者的区别: $ 在谁前面,谁不动
    一个单元格地址有两部分组成:一个是字母(代表列数),一个是数回字(代表行数)。
    注:这里是给字母和数字前面都加上了**$**,读取的都是设置区域固定的内容,如果只是给字母添加,列不变,但行数会变,读取的内容会动态变化。

    博客来源

    【1】https://jingyan.baidu.com/article/0964eca26da8bd8285f536ab.html

    展开全文
  • """ ...# 对序列长度进行统计 # 绘制直方图 """ import os import pandas as pd from collections import Counter import matplotlib.pyplot as plt import sys def read_seq(file_pat...
  • 【C++】 最长公共子序列长度(PTA)

    千次阅读 2020-08-09 09:54:59
    求两个字符串的最长公共子序列长度。 输入格式: 输入长度≤100的两个字符串。 输出格式: 输出两个字符串的最长公共子序列长度。 输入样例1: ABCBDAB BDCABA 输出样例1: 4 输入样例2: ABACDEF PGHIK 输出样例2: 0 ...
  • 最长递增子序列,给定一个无序整数数组nums(字符串也可以,不重要),给出最长严格递增子序列长度。比如输入[1, 2 , 1, -1, 1, 4, 0],输出3,最长递增子序列[1, 2, 4],当然可能不唯一,[-1, 1, 4]也是一个,...
  • 求最长连续子序列长度

    千次阅读 2019-06-24 22:59:31
    给你一个排序的数组,例如 { 1, 3, 4, 5, 9, 10, 11, 12, 13, 14, 15 } ,求最长连续子序列长度 public static int getLongest(int[] strs) { int max = 0; int oldmax = 0; for (int i = 1; i < strs....
  • 给你一个整数数组 nums ,找到其中最长严格递增子序列长度。 子序列:子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 ...
  • 使用Python计算fasta文件的序列长度

    千次阅读 2018-11-30 15:29:38
    使用Python计算fasta文件的序列长度 在这里插入代码片使用Python计算fasta文件的序列长度 #!/usr/bin/python #-- coding:utf-8 -- import sys f = open(sys.argv[1],‘r’) out = open(sys.argv[2],‘w’) def chr_...
  • 求数组的最长递减子序列长度 题目描述 给定一个整数序列,输出它的最长递减(注意不是“不递增”)子序列。 输入 输入包括两行,第一行包括一个正整数N(N<=1000),表示输入的整数序列的长度。第二行包括用...
  • 最长连续递增子序列长度和最长不连续递增子序列长度 1.最长连续递增子序列 例如:Array[6] = {1,5,2,4,3,8} 其最长连续递增子序列就2,4或3,8,最长长度为2 设数组dp[i],表示以i为结尾的最长连续子序列长度,...
  • 假设两个序列 A,B,找两者的最长公共子序列; 第一步: 我们要去找出 A中所有与 B 相同的元素,这些元素在 B中的位置,各自为一个集合;比如 A = { a c f d } ,B = { c f g c a } , 则有 (从 i = 1 ...
  • 编程之美2.16中,求数组最长递增子序列长度,例如数组为:1,-1,2,-3,4,-5,6,-7,那么最长递增序列是:1,2,4,6,长度是4. 可以看出,子序列不一定是连续的 解题思路: 动态规划问题; 使用 i 表示...
  • 主要实现对fastq文件中不同长度序列进行统计并绘制简单的直方图 详细可见代码说明及注释 #_*_coding:UTF-8_*_ ...3.对序列长度进行统计 """ import os import pandas as pd from collections import Counter impo...
  • python 从fastq文件中挑选出序列长度在规定范围的序列 FASTQ文件长度过滤
  • #!/usr/bin/perl -w use strict; my $file="myseq.fa"; open(FH,$file) or die $!; my %hash; my $id=0; while(<FH>){ chomp; my $temp; if($_=~/^>/){ $_=~ s/^>... }...
  • 题目要求是要从一个fasta文件中统计出每条序列长度分布,并作图。代码如下:import os import getpass import matplotlib.pyplot as plt usr = getpass.getuser() os.chdir('c:/Users/' + usr + '/Desktop') seq_...
  • 4.2.6 序列长度、最大值和最小值 先介绍三个内建函数:len、max和min。这三个函数用于返回序列中元素的数量、序列值最大的元素和序列值最小的元素。使用max和min函数需要注意一点,就是序列中的每个元素值必须是...
  • 图片来源于Keras中文文档
  • 给定一个无序的整数数组,找到其中最长上升子序列长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要...
  • 【算法】最长递增子序列长度

    千次阅读 2016-07-29 20:31:05
    题目求一个一维数组a[i]中的最长递增子序列的长度,如在序列1,-1,2,-3,4,-5,6,-7中,最长递增子序列长度为4,可以是1,2,4,6,也可以是-1,2,4,6。算法思路算法一(简单暴力)/** 用b[]记录当前最长递增...
  • 求字符串中包含的最长的非严格递增连续数字序列长度 比如: 12234属于非严格递增数字序列 示例: 输入 abc2234019A334bc 输出 4 说明: 2234为最长的非严格递增连续数字序列,所以长度为4 aaaaaa44ko543j123j...
  • perl 从fastq文件中挑选出序列长度在规定范围的序列 FASTQ文件长度过滤
  • 定义 f[i][j] 表示处理了 a 字符串的1~ i 和 b 字符串的 1 ~ j ,最长的公共子序列长度是多少 转移方程: 如果当前的 a[i] == b[j] 则多一步  这些应该都很好理解,最后的答案就存在:f [ strlen(a+1) ...
  • python返回连续递增子序列长度

    千次阅读 2017-12-27 14:07:27
    针对全是数字的序列如电话号码 在反欺诈的运用里,很重要的一部分是电话号码欺诈...函数找出电话号码中诸如’123456‘的连续递增子序列长度 ''' def LIS(l): n=len(l) F=[1]*n for i in range(1,n): if int(l[i]
  • 输入一个字符串,合法的DNA序列只包含ATCG这四种碱基对,求给定字符串中的最长DNA序列 具体实现如下: one_str=raw_input() one_str_list=list(one_str) one_list=[] need_list=['A','T','C','G'] for one in one_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 673,581
精华内容 269,432
关键字:

如何知道序列长度