最小和截段 Xiaoqiang Wu

  在阅读《面向计算机科学的数理逻辑:系统建模与推理》书4.3.3节时,看到对于最小和截段的一种O(n)的实现。

#include <iostream>
using namespace std;

int min(int a, int b){
  if(a < b){
    return a;
  }else{
    return b;
  }
}

int main(){
  int a[6] = {-1, 3, 15, -6, 4, -5};
  int k = 1;
  int t = a[0];
  int s = a[0];
  while(k != 6){
    t = min(t + a[k], a[k]);
    s = min(s, t);
    k++;
  }
  cout << "s is " << s << endl;
  return 0;
}

其中,变量$t$存储了以$a[k]$结尾的截段的最小和,变量$s$存储了到目前为止看到的最小和。