Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31272
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 111
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-10 18:38
文章分类
文章存档

2014年(1)

2013年(4)

我的朋友

分类: C/C++

2013-06-11 15:39:42

令x1,x2,...,xn是一串实数(不需要一定为正数)。设计一个O(n)的算法,寻找一个(连续的)子序列xi,xi+1...xj,使得他们的乘积在所有子序列乘积中最大。空序列的乘积定义为1.
算法描述:运用加强的归纳算法,如果知道了x1,x2,...,xn-1的乘积最大子序列,分两种情况:
a、那么如果n-1规模的最大子序列中包含xn-1,那么xn>1,则xn属于最大子序列;如果xn<1,那么最大子序列不变。
b、如果n-1归农的最大子序列中不包含xn-1,那么就要考虑几个后最的情况:
      i、如果xn>1,就要考虑最大正后缀,如果最大正后缀>原后缀,更新最大序列
      ii、如果xn<-1,就要考虑最小负后缀

  1. void fmax_mulsque(double x[])
  2. {
  3.    double Nsuffix = 0;//0代表初始无后缀。
  4.    double Psuffix = 0;
  5.     max = 1;
  6.     int i;
  7.     double tmp;
  8.     for(i = 0; i < NUM; i++) //NUM数组长度
  9.         {
  10.             if(x[i]>1)
  11.                { if(Psuffix == 0) Psuffix = x[i];
  12.                     else {
  13.                             Psuffix *= x[i];
  14.                          }
  15.                     if(Psuffix > max) max = Psuffix;
  16.                     if(Nsuffix != 0) Nsuffix *= x[i];
  17.                }
  18.              else if(x[i] < -1)
  19.                     {
  20.                         if(Nsuffix == 0) Nsuffix = x[i];
  21.                         else
  22.                             { tmp = Nsuffix;
  23.                                if(Psuffix !=0) Nsuffix = Psuffix * x[i];
  24.                                else Nsuffix = x[i];
  25.                                Psuffix = tmp * x[i];
  26.                                if(Psuffix > max) max = Psuffix;
  27.                             }
  28.                     }
  29.              else if(x[i] >= 0)
  30.                     {
  31.                         if(Psuffix*x[i] >=1) Psuffix *= x[i];
  32.                         else Psuffix = 0;
  33.                         if(Nsuffix*x[i] <= -1) Nsuffix *= x[i];
  34.                         else Nsuffix = 0;
  35.                     }
  36.              else
  37.                 {
  38.                       if(Nsuffix*x[i] >=1) Psuffix *= x[i];
  39.                         else Psuffix = 0;
  40.                       if(Psuffix*x[i] <= -1) Nsuffix *= x[i];
  41.                         else Nsuffix = 0;
  42.                 }

  43.         }
  44. }






阅读(2299) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~