亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

逐步優(yōu)化求解最大子序列和

系統(tǒng) 1917 0

求解最大子序列和

tag: 數(shù)據(jù)結(jié)構(gòu)與算法


最大子序列和問題:

給定序列A 1 , A 2 ,... A N , 求最大的子序列和。
例如 :
  對于序列4, -3, 5, -2, -1, 2, 6, -2, 最大序列和為11(4 -3 + 5 - 2 - 1 + 2 + 6)

算法一:

利用兩個循環(huán),第一個循環(huán)把序列遍歷一遍,第二個循環(huán)則從A i 累加到A N ,每加一次判斷一下是否大于之前的最大子序列和:

    
      int maxSubsequenceSum1 (const int arr[], int n) {
  int maxSum = 0;
  int temp;

  for (int i = 0; i < n; i++) {
    temp = 0;

    for (int j = i; j < n; j++) {
      temp += arr[j];
      if (temp > maxSum)
	maxSum = temp;
    }
  }

  return maxSum;
}
    
  

時間復(fù)雜度:O(n 2

算法二:

首先把序列從中間一分為二, 則最大子序列和的存在有三種情況:

  1. 全在左邊的子序列
  2. 全在右邊的子序列
  3. 處在中間
    對于第一和第二種情況,只需要遞歸調(diào)用求解函數(shù),對于第三種情況則要分別求出從中間出發(fā),向左邊和向右邊各自的最大子序列和。
    
      int max(int a, int b, int c) {
  int max;

  if (a > b)
    max = a;
  else 
    max = b;

  if (c > max)
    max = c;

  return max;
}

int maxSubsequenceSum2 (const int arr[], int begin, int end) {
  int maxLeftSum, maxRightSum, maxLeftCenterSum, maxRightCenterSum, center, temp;

  if (begin >= end) {
    if (arr[begin] > 0)
      return arr[begin];
    else
      return 0;
  }

  center = (begin+end)/2;
  maxLeftSum = maxSubsequenceSum2(arr, begin, center);
  maxRightSum = maxSubsequenceSum2(arr, center+1, end);

  maxLeftCenterSum = 0;
  temp = 0;
  for (int i = center; i >= begin; i--) {
    temp += arr[i];

    if (temp > maxLeftCenterSum)
      maxLeftCenterSum = temp;
  }

  maxRightCenterSum = 0;
  temp = 0;
  for (int i = center+1; i <= end; i++) {
    temp += arr[i];

    if (temp > maxRightCenterSum)
      maxRightCenterSum = temp;
  }

  return max(maxLeftSum, maxRightSum, (maxLeftCenterSum+maxRightCenterSum));
}
    
  

時間復(fù)雜度:O(nlogn)

算法三:

累加序列,若發(fā)現(xiàn)當(dāng)前序列和大于之前最大序列和,則替換.若發(fā)現(xiàn)當(dāng)前序列和小于0,則將當(dāng)前序列和置換成0,相當(dāng)于把前面的序列都舍棄掉.

    
      int maxSubsequenceSum3(int arr[], int n) {
  int tempSum = 0, maxSum = 0;

  for (int i = 0; i < n; i++) {
    tempSum += arr[i];
    if (tempSum < 0)
      tempSum = 0;
    if (tempSum > maxSum)
      maxSum = tempSum;
  }

  return maxSum;    
}
    
  

時間復(fù)雜度:O(n)

逐步優(yōu)化求解最大子序列和


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕日韩欧美一区二区三区 | 天天襙| 国产69精品久久久久99不卡 | 福利小视频在线 | 亚洲日韩欧洲无码av夜夜摸 | 99热在线获取最新地址 | 日本一区二区三区不卡在线视频 | 黄色综合网 | 久久久久久久亚洲精品一区 | 98色花堂国产精品首页 | 亚洲一区日韩二区欧美三区 | 久久九九免费 | 天天综合久久 | 天天做夜夜爽 | 精品一区二区三区在线视频观看 | 欧美精品影院 | 国产亚洲视频在线 | 久青草免费视频手机在线观看 | 精品一区二区视频在线观看 | 成人97在线观看免费高清 | 久久精品男人的天堂 | 久热爱免费精品视频在线播放 | 亚洲精品久久久中文字幕 | 成人在免费观看视频国产 | 69欧美另类xxxxx高清 | 久久亚洲精品视频 | 久久99精品久久久久久牛牛影视 | 国产午夜永久福利视频在线观看 | 亚洲综合区小说区激情区噜噜 | 伊人网综合视频 | 全部免费毛片免费播放 | www.久久色| 久久久久一 | 农村妇女高清毛片一级 | 吃奶japanesevideo| 理论片 我不卡影院 | 伊人久久青草青青综合 | 亚洲国产婷婷香蕉久久久久久 | 亚洲欧美激情综合第一区 | 午夜在线播放免费高清观看 | 9久9久热精品视频在线观看 |