Beispiel #1
0
struct res max_sub(int a[], int i, int j)
{
        int mid, left_sum = 0, right_sum = 0, sum, left_ind, right_ind, p;
        struct res r, left, right, center;

        // printf("max_sub(a, %d, %d) ", i, j);
        mid = (i+j)/2;

        if (i == j) {
                r.i = r.j = i;
                r.sum = a[i];
                goto ret;
        }

        right = max_sub(a, mid + 1, j);
        left = max_sub(a, i, mid);

        /* Find max left and right sum and track indices */
        sum = 0;
        left_ind = mid;

        for(p = mid; p >= i; p--) {
                sum += a[p];
                if(sum > left_sum) {
                        left_sum = sum;
                        left_ind = p;
                }
        }

        sum = 0;
        right_ind = mid + 1;

        for(p = mid + 1; p <= j; p++) {
                sum += a[p];
                if(sum > right_sum) {
                        right_sum = sum;
                        right_ind = p;
                }
        }

        center.sum = right_sum + left_sum;
        center.i = left_ind;
        center.j = right_ind;

        if(left.sum > right.sum)
                r = left;
        else
                r = right;

        if(r.sum < center.sum)
                r = center;

ret:
        // printf(" --> (%d, %d). sum = %d\n", r.i, r.j, r.sum);
        return r;
}
Beispiel #2
0
void max_rect(int a[R][C])
{
	int i, j, sum[R], max_sum, t;
	int p, q, r, s;
	struct res res;

	max_sum = a[0][0];
	p = 0;
	q = 0;

	for(i = 0; i < C; i++) {
		memset(sum, 0, R*sizeof(int));
		for(j = i; j < C; j++) {
			for(t = 0; t < R; t++)
				sum[t] += a[t][j];
			res = max_sub(sum, 0, R-1);
			if(res.sum > max_sum) {
				max_sum = res.sum;
				p = res.i;
				q = res.j;
				r = i;
				s = j;
			}
		}
	}

	printf("max rectangle (%d,%d) (%d,%d) (%d,%d) (%d,%d)\n", p,r,p,s,q,r,q,s);
}
Beispiel #3
0
int main()
{
    int a[]={1,-2,4,-8,10,1,-7,3,7};
    int len=sizeof(a)/sizeof(a[0]);
    int max=max_sub(a,len);
    printf("maximum sub array %d",max);
    return 0;
}
  void EDTAFile::store(const String& filename, const ConsensusMap& map) const
  {
    TextFile tf;

    // search for maximum number of sub-features (since this determines the number of columns)
    Size max_sub(0);
    for (Size i = 0; i < map.size(); ++i)
    {
      max_sub = std::max(max_sub, map[i].getFeatures().size());
    }

    // write header
    String header("RT\tm/z\tintensity\tcharge");
    for (Size i = 1; i <= max_sub; ++i)
    {
      header += "\tRT" + String(i) + "\tm/z" + String(i) + "\tintensity" + String(i) + "\tcharge" + String(i);
    }
    tf.addLine(header);

    for (Size i = 0; i < map.size(); ++i)
    {
      ConsensusFeature f = map[i];
      // consensus
      String entry = String(f.getRT()) + "\t" + f.getMZ() + "\t" + f.getIntensity() + "\t" + f.getCharge();
      // sub-features
      ConsensusFeature::HandleSetType handle = f.getFeatures();
      for (ConsensusFeature::HandleSetType::const_iterator it = handle.begin(); it != handle.end(); ++it)
      {
        entry += String("\t") + it->getRT() + "\t" + it->getMZ() + "\t" + it->getIntensity() + "\t" + it->getCharge();
      }
      // missing sub-features
      for (Size j = handle.size(); j < max_sub; ++j)
      {
        entry += "\tNA\tNA\tNA\tNA";
      }
      tf.addLine(entry);
    }


    tf.store(filename);
  }
Beispiel #5
0
int main() {
    int data[] = {1,2,3,-100,10,-11,1,2,100,-1000,100};
    int v = max_sub(data, sizeof(data) / sizeof(data[0]));
    printf("max sub is %d\n", v);
    return 0;
}