awk--最大子段和(算法)

691阅读 0评论2010-11-03 expert1
分类:

一组没有任何规律可言的数,可正可负,比如:
  1. 2.62212
  2. 2.08934
  3. -3.45814
  4. 3.47792
  5. -0.855373
  6. 3.06525
  7. -3.10623
  8. 3.26469
  9. 0.150168
  10. 3.48137
  11. 1.33043
  12. 0.0826352
  13. -4.10094
  14. 2.34743
  15. -3.93188
  16. 2.79649
  17. -1.31798
  18. -0.710772
  19. 1.67842
  20. 3.95545

取连续的m项加和,求和最大时的连续项的起点和终点。

awk 'BEGIN{start=1}

{sum+=$0

if(sum > max){tmp=start;end=NR;max=sum}

else if(sum < 0){sum=0;start = NR+1}}

END{
print tmp,end,max}'

 

上一篇:一个awk数组的月经问题,以后不想看到了。
下一篇:提取文件里不相交的范围(去掉有交集的行)