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; }
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); }
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); }
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; }