<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

本文涉及的产品
转发路由器TR,750小时连接 100GB跨地域
简介: 题目大意:给出一序列,求该序列的子序列和最大的子序列。下面共有四种算法:程序运行时间依次降低,最佩服的是最后的联机算法,时间已达到O(N).注意C++中的函数调用与传值下面分析四种算法:关于每种程序的运行时间,我们只关注他的最坏情况即可。
  • 题目大意:给出一序列,求该序列的子序列和最大的子序列。

  • 下面共有四种算法:程序运行时间依次降低,最佩服的是最后的联机算法,时间已达到O(N).

  • 注意C++中的函数调用与传值

  • 下面分析四种算法:关于每种程序的运行时间,我们只关注他的最坏情况即可。

    • 算法一,有三个大循环,假设第一个循环的大小N,每个循环都考虑最坏的情况,则总数为 O(N),
      使用开销的思路推一下,精确分析可知,最大开销: N1i=0N1j=ijk=i1,该和指出此程序三次循环被执行了多少次,由内到外求值,首先我们有
      k=ij1=ji+1

      然后我们可以得到
      j=iN1(ji+1)=(Ni+1)(Ni)2

      继续:
      i=0N1(Ni+1)(Ni)2=i=1N(Ni+1)(Ni+2)2

      =12i=1Ni2(N+32)i=1Ni+12(N2+3N+2)i=1N1

      =12N(N+1)(2N+1)6(N+32N(N+1)2+N2+3N+22N)

      =N3+3N2+2N6

      所以算法一的最大消费为O(N3)。
 #include<iostream>
 #include<vector>
 #include<algorithm>
 using namespace std;
//最大子序列求和
//算法一
//穷举法
int maxsubsum(const vector &a)
{
    int maxsum=0;
    for(int i=0;i<a.size();i++)
     for(int j=i;j<a.size();j++)
    {
        int ThisSum=0;
        for(int k=i;k<=j;k++)
        {
            ThisSum+=a[k];
        }
        if(ThisSum>maxsum)
            maxsum=ThisSum;
    }
    return maxsum;
}
//算法二
//对穷举法进行优化
int maxsubsum1(const vector &a)
{
    int maxsum=0;
    for(int i=0;i<a.size();i++)
    {
        int ThisSum=0;
        for(int j=i;j<a.size();j++)
        {
            ThisSum+=a[j];
            if(ThisSum>maxsum)
            maxsum=ThisSum;
        }
    }
    return maxsum;
}
//算法三
//分治法
int maxsumrec(const vector<int> &a,int left,int right)
{
    if(left==right)
    {
        if(a[left]>0)
            return a[left];
        else
            return 0;
    }
    int center=(left+right)/2;
    int maxleftsum=maxsumrec(a,left,center);
    int maxrightsum=maxsumrec(a,center+1,right);
    int maxleftbordersum=0,leftbordersum=0;
     int lrmax=max(maxleftsum,maxrightsum);
    for(int i=center;i>=left;i--)
    {
         leftbordersum+=a[i];
         if(leftbordersum>maxleftbordersum)
            maxleftbordersum=leftbordersum;
    }
    int maxrightbordersum=0,rightbordersum=0;
    for(int i=center+1;i<=right;i++)
    {
        rightbordersum+=a[i];
        if(rightbordersum>maxrightbordersum)
            maxrightbordersum=rightbordersum;

    }
    return max(lrmax,maxleftbordersum+maxrightbordersum);
}

int maxsubsum2(const vector <int> &a)
{
     return maxsumrec(a,0,a.size()-1);
}
//算法四
//联机算法
int maxsubsum3(const vector<int >&a)
{
    int MaxSum=0,ThisSum=0;
    for(int j=0;j<a.size();j++)
    {
        ThisSum+=a[j];
        if(ThisSum>MaxSum)
            MaxSum=ThisSum;
        if(ThisSum<0)
         ThisSum=0;
    }
    return MaxSum;
}
int main()
{
   int input[10];
   for(int i=0;i<5;i++)
   {
       cin>>input[i];
   }
   //注意这里是去给vector容器初始化赋值的时候,区间是[begin,end];
   vector<int>inputVetor(&input[0],&input[4]);
   cout<<maxsubsum(inputVetor)<<endl;
   cout<<maxsubsum1(inputVetor)<<endl;
   cout<<maxsubsum2(inputVetor)<<endl;
   cout<<maxsubsum3(inputVetor)<<endl;
   return 0;
}
目录
相关文章
|
SQL Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
在运行一个group by的sql时,抛出以下错误信息: Task with the most failures(4):  -----Task ID:  task_201411191723_723592_m_000004URL:  http://DDS0204.
977 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
异步通信 对于BS(Browser-Server 浏览器)架构,很多情景下server的处理时间较长。 如果浏览器发送请求后,保持跟server的连接,等待server响应,那么一方面会对用户的体验有负面影响; 另一方面,很有可能会由于超时,提示用户服务请求失败。
771 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Hbase依赖的datanode日志中如果出现如下报错信息:DataXceiverjava.io.EOFException: INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in receiveBlock for block  解决办法:Hbase侧配置的dfs.socket.timeout值过小,与DataNode侧配置的 dfs.socket.timeout的配置不一致,将hbase和datanode的该配置调成大并一致。
802 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Every Programmer Should Know These Latency Numbers 1秒=1000毫秒(ms) 1秒=1,000,000 微秒(μs) 1秒=1,000,000,000 纳秒(ns) 1秒=1,000,000,000,000 皮秒(ps) L1 cache reference .
649 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
java链接MongoDB处理大量数据时经常碰到cursor not found 的异常,其实是超时所致 Exception in thread "main" com.
832 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
zookeeper watch的定义如下:watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher。
941 0
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.HBase依赖于HDFS,HBase按照列族将数据存储在不同的hdfs文件中;MongoDB直接存储在本地磁盘中,MongoDB不分列,整个文档都存储在一个(或者说一组)文件中 (存储) 2.
735 0
|
Web App开发 监控 前端开发
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
从hadoop移除机器把需要移除的机器增加到exclueds文件中,强制刷新datanode列表,等待decommission 状态正常后,即可停机下架,如有必要在namenode执行balancer操作。
686 0
|
Web App开发 前端开发 Linux
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
 频繁的文件访问会导致系统的Cache使用量大增   $ free -m   total used free shared buffers cached   Mem: 3955 3926 28 0 55 3459   -...
650 0