青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

jake1036

求最大連續子向量最大和

                                 最大連續子向量和

   一個整形數組,求其間連續的子向量,使其子向量的和最大。 如一組數組元素為 31 , -41 ,59 , 26 ,-53 ,58 , 97 , -93 , -23 , 84
      【2 , 6】之間的子向量之和最大。定義若數組中的元素全部為負數,則最大和值為0 。 若數組中的數字全部為正數,則最大和值即為數組中的全部元素之和。


        解法一:
        經過建模轉換,即是求在[1,n]中 求[i,j]之和的最大值,使用暴力解法,算出任意[i,j]之間的各個值,然后取最大值,即為所求。
         

#include <iostream>
using namespace std ;
 
  
int sumMax(int *a , int n)
  
{
        
        
int max = 0 ,sum = 0 ; //
        for(int i = 0 ; i < n ; i++)
        
{
          sum 
= 0 ;      
          
for(int j = i ; j < n ; j++)
           
{
               sum 
+= a[j] ;
               
if(max < sum)
                
{
                  max 
= sum ;      
                }
     
           }

        }

      
      
return max ;
  }

 
 
  
int main()
  
{
    
int a[] = {31 , -41 ,59 , 26 ,-53 ,58 , 97 , -93-23 , 84} ;
    cout
<<"max"<<sumMax(a , 8) ;
    cin.
get() ;
   
    
return 0 ;    
  }

      


  解法二 
     第一種解法比較常見,但是此種解法則不常用。定義個數據S ,則S[i] 表示數組a[0]到a[i]之間的元素之和,那么S[j]-S[i] 的差值,表示
     a[i]到a[j]之間和。  本題的問題,就是求S[j]-S[i]的最大值。
   

#include <iostream>
 
using namespace std ;
 
 
int sumMax(int * s , int n )
 
{
     
int sum = 0 , max = 0 ;
     
for(int i = 0 ; i < n ; i++)
      
{        
        
for(int j = i + 1;j < n  ;j++
         
{
            sum 
= s[j] - s[i] ;
            
if(sum > max)
              max 
= sum ;        
         }

      }

      
return max ;
     
 }

 
 
int main()
 
{
     
   
int a[] = {31 , -41 ,59 , 26 ,-53 ,58 , 97 , -93-23 , 84} ;
   
int * s = new int[8];
   
int sum = 0 ;
   
for(int i = 0 ; i < 8 ; i++)
    
{
       sum 
+= a[i] ;    
       s[i] 
= sum ;
    }
 
     
     
     cout
<<"max"<<sumMax(s , 8);
     
     
   delete [] s ;
   cin.
get() ; 
   
return 0 ;    
 }
 


   綜上,以上的兩種解法都是O(n*n)級別的,實質上可以使用分治法來解決此問題。

  解法三:
   利用分治法解決最大子序列和問題
  可以將原數組從中間元素開始分成兩個部分,左邊部分最大子序列和為Ml,右邊部分最大子序列和為Mr,還有一種情況即整個數組的
   最大子序列和存在左右兩個部分之間,記為Mc。 所求結果即為Ml 、Mr、Mc 三者的最大值。利用遞歸算法解決此問題。


  

/*
 該算法使用了分治法,求最大子序列的和問題 
*/


#include 
<iostream>
 
using namespace std ;
 
 inline 
int Max(int , int) ;
 
int sumMax(int * a , int l , int r);

 
 
 
int main()
 
{
  
int a[] = {31 , -41 ,59 , 26 ,-53 ,58 , 97 , -93-23 , 84} ;
  cout
<<sumMax(a , 0 , 9) ; 
  cin.
get() ;
   
return 0 ;    
 }

 
 
 
 inline 
int Max(int x , int y)
 
{
    
return x>? x : y ;       
        
 }
 
 
 
  
int sumMax(int * a , int l , int r)
 
{
     
if(l > r)
       
return 0 ;
     
if(l == r)  
      
return Max(0 , a[l]) ;
     
//計算左部分的最大值
     
     
int m = (l + r) >> 1 ;
     
     
int lmax = 0 , sum = 0 ;
     
for(int i = m ; i >= 0 ; i--//左部分從中間向左依次疊加,然后判斷是否獲得最大值 
      
       sum 
+= a[i] ;
       lmax 
= Max(sum , lmax) ;  //左邊最大值    
       }

       
      
int rmax = 0 ;
       sum 
= 0 ;
      
for(int j =  m + 1; j <= r ; j++)//右部分從中間向右依次疊加,然后判斷是否獲得最大值
        {
         sum 
+= a[j] ;
         rmax 
= Max(sum , rmax) ;  //右邊最大值
        }
    
      
return Max(lmax + rmax , Max(sumMax(a , l , m) , sumMax(a , m + 1 , r) )) ;
       
     
 }



 第三個算法的時間復雜度為o(n *  log(n)) ,通過這個題目來學習分治法。




  第四種解法:
       該解法為一線性解法,算法復雜度為O(n) ,定義maxEndingHere為截止到a[j]處的最大子數組之和,則a[j+1]處的最大子數組之和為
      max(maxEndingHere + a[j + 1] , 0) ,而我們的所求maxSofar即為各個位置最大的maxEndingHere。

    

/*
 通過線性算法解決問題 
*/


#include 
<iostream>
 
using namespace std ;
 inline 
int Max(int , int) ;
 
int sumMax(int a[] , int n) ; 
 
 
int main()
 
{
   
int a[] = {31 , -41 ,59 , 26 ,-53 ,58 , 97 , -93-23 , 84} ;
  cout
<<sumMax(a  , 9) ; 
  cin.
get() ;
   
return 0 ;    
 }
 

 inline 
int Max(int x , int y)
 
{
    
return x>? x : y ;       
        
 }
 
 
  
int sumMax(int a[] , int n) 
      
{
        
int maxEndingHere = 0 , maxSoFar = 0 ; //maxEndingHere 表示截止到位置i處的最大子序列和 
        for(int i = 0 ; i < n ; i++
         
{
           maxEndingHere 
= Max(maxEndingHere + a[i] , 0 ) ; 
           maxSoFar 
= Max(maxEndingHere , maxSoFar) ;      
         }

         
         
return maxSoFar ;          
      }


    






          
   

posted on 2011-03-12 15:43 kahn 閱讀(1015) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区我不卡| 精品不卡视频| 欧美xart系列在线观看| 狠狠色伊人亚洲综合成人| 久久精品日韩欧美| 久久久亚洲欧洲日产国码αv| 国产日产欧产精品推荐色| 欧美一区二区大片| 久久久久久久波多野高潮日日 | 久久精选视频| 久久精品99无色码中文字幕| 99在线|亚洲一区二区| 国产精品普通话对白| 久久精品国产v日韩v亚洲| 久久久噜噜噜久久中文字幕色伊伊| 在线观看日韩av电影| 亚洲精品视频一区| 你懂的国产精品| 国产情人节一区| 亚洲承认在线| 国产日产欧产精品推荐色 | 亚洲精选一区| 国产精品亚洲综合| 亚洲精品视频在线看| 经典三级久久| 亚洲伊人伊色伊影伊综合网| 亚洲高清123| 久久精品一二三区| 欧美亚洲一区二区三区| 欧美日韩成人激情| 欧美激情一区二区三区蜜桃视频 | 国产精品视频久久| 亚洲狠狠丁香婷婷综合久久久| 国产色产综合产在线视频| 日韩亚洲精品在线| 国产精品久久二区二区| 久久av老司机精品网站导航| 欧美四级剧情无删版影片| 亚洲国产精品一区二区第四页av| 欲香欲色天天天综合和网| 久久xxxx精品视频| 久久久久久一区| 亚洲二区三区四区| 亚洲一区精彩视频| 国产精品盗摄一区二区三区| 一区二区三区www| 午夜精品久久久久久久99热浪潮 | 亚洲欧洲在线一区| 欧美日韩日日骚| 午夜欧美不卡精品aaaaa| 久久久免费av| 日韩一二三在线视频播| 欧美午夜寂寞影院| 久久成人亚洲| 亚洲国产综合视频在线观看| 一区二区三区四区蜜桃| 欧美日韩中文另类| 久久久久久久综合日本| 在线视频国产日韩| 国产精品videossex久久发布| 欧美专区中文字幕| 亚洲手机成人高清视频| 欧美www在线| 欧美专区亚洲专区| 亚洲午夜视频在线观看| 伊人久久大香线蕉av超碰演员| 欧美日韩免费高清一区色橹橹| 香蕉国产精品偷在线观看不卡| 亚洲第一精品夜夜躁人人爽| 欧美一区亚洲一区| 亚洲午夜精品一区二区| 亚洲激情网址| 亚洲日本中文字幕| 亚洲国内在线| 一区二区在线视频| 在线观看视频一区二区欧美日韩| 国产欧美日韩在线播放| 国产精品一区二区久久久久| 午夜在线播放视频欧美| 久久久久久网址| 午夜亚洲一区| 午夜精品久久久久久久99樱桃| 久久久久成人精品| 亚洲欧美高清| 久久久久久亚洲精品中文字幕| 新片速递亚洲合集欧美合集| 亚洲一级在线观看| 中文网丁香综合网| 欧美夜福利tv在线| 久久久久看片| 欧美国产91| 在线视频欧美一区| 午夜精品久久久| 久久综合九色综合欧美就去吻| 蜜桃视频一区| 国产乱码精品一区二区三区不卡| 国产欧美一级| 日韩视频在线一区二区| 亚洲综合好骚| 欧美激情国产日韩| 亚洲欧美日韩一区在线| 久久精品亚洲精品国产欧美kt∨| 久久久夜夜夜| 国产精品无码永久免费888| 国语精品中文字幕| 亚洲精品久久久久久久久久久久 | 亚洲最新视频在线播放| 亚洲一区二区三区在线播放| 久久精品视频播放| 国产精品拍天天在线| 日韩视频永久免费| 免费在线播放第一区高清av| 亚洲一区二区三区视频| 欧美日本簧片| 亚洲精品美女在线观看| 欧美成人免费观看| 麻豆9191精品国产| 亚洲国产欧美一区二区三区同亚洲 | 宅男精品视频| 最新成人在线| 欧美精品国产精品日韩精品| 亚洲高清视频的网址| 你懂的成人av| 欧美成人一区二区在线| 亚洲日本电影| 99re热这里只有精品视频| 国产精品电影网站| 欧美综合第一页| 性久久久久久| 猛男gaygay欧美视频| 亚洲国产精品第一区二区| 欧美福利在线观看| 欧美女人交a| 欧美一区二区三区视频在线观看| 亚洲一区在线观看视频| 国产午夜精品视频免费不卡69堂| 欧美专区18| 欧美激情一区二区久久久| 亚洲毛片在线看| 国产一区二区三区在线观看网站| 久久久久国产一区二区三区| 久久精品在线| 洋洋av久久久久久久一区| 亚洲欧美成aⅴ人在线观看| 亚洲国内自拍| 久久福利毛片| 亚洲综合激情| 欧美调教vk| 亚洲欧洲另类| 在线观看视频一区| 欧美在线一二三| 欧美亚洲专区| 欧美三级特黄| 亚洲美女区一区| 亚洲精选视频免费看| 久久天堂精品| 久久尤物电影视频在线观看| 国产精品久久久久久久一区探花 | 欧美国产在线电影| 国内精品美女在线观看| 亚洲影院免费观看| 亚洲欧美综合网| 国产精品大片wwwwww| 中国成人亚色综合网站| 一区二区三区高清不卡| 欧美日韩国产123| 在线视频你懂得一区| 亚洲一级在线| 国产日韩一区二区三区在线播放 | 中文日韩在线| 亚洲一区久久| 国产日产欧产精品推荐色| 久久久久久999| 亚洲国产成人久久| 亚洲视频在线观看视频| 国产日韩欧美在线一区| 久久久精品网| 亚洲精选中文字幕| 久久国产精品一区二区三区四区| 国产农村妇女精品一区二区| 亚洲免费视频成人| 亚洲在线视频免费观看| 国产精品国产a级| 久久精品系列| 亚洲综合三区| 欧美不卡一区| 久久免费99精品久久久久久| 亚洲人精品午夜| 国产精品免费视频观看| 另类av一区二区| 在线视频亚洲欧美| 欧美激情亚洲视频| 久久久久亚洲综合| 亚洲小说欧美另类社区| 在线免费精品视频| 国产精品永久免费在线| 欧美日韩亚洲一区二区三区四区| 欧美在线综合视频| 中文欧美日韩| 亚洲精选中文字幕|