免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 54nwq
打印 上一主题 下一主题

[数值计算] 求教用awk怎样凑数字 [复制链接]

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
11 [报告]
发表于 2015-03-03 12:35 |只看该作者
本帖最后由 jason680 于 2015-03-03 12:53 编辑

@zsszss0000 @54nwq

Here you are with good performance

$ time awk -vv=275.32 'function x(v,s,c,t,p,y){if(s-c>1)while(++p<=NR-s+c)x(v,s,c+1,t+a[p],p,y a[p]"("p")+");else{if(t+max<v||v<t+min)return;while(++p<=NR){if(v==t+a[p]){cnt++;print v"="y a[p]"("p")"}}}}{a[NR]=$1;N=NR;if(NR==1)max=min=$1;if(max<$1)max=$1;if(min>$1)min=$1;printf $1"("NR"), "}END{print "\nmax="max", min="min;for(n=1;n<=NR;n++)x(v,n);print "got total:"cnt}' FILE
43.11(1), 56.27(2), 88(3), 7.22(4), 4.77(5), 38.59(6), 95.09(7), 64.04(8), 66.61(9), 54.99(10), 54.77(11), 34.83(12), 3.23(13), 4.75(14), 80.26(15), 12.9(16), 77.26(17), 28.17(18), 78.01(19), 68.87(20), 83.95(21), 12.29(22), 79.08(23),
max=95.09, min=3.23
275.32=43.11(1)+64.04(8)+12.9(16)+77.26(17)+78.01(19)
...
275.32=4.77(5)+38.59(6)+95.09(7)+34.83(12)+3.23(13)+4.75(14)+12.9(16)+68.87(20)+12.29(22)
got total:23

real    0m15.366s
user    0m12.925s
sys    0m0.252s

$ time awk -vv=275.32 'function x(v,s,c,t,p,y){if(t>v)return;if(s-c>1)while(++p<=NR-s+c)x(v,s,c+1,t+a[p],p,y a[p]"("p")+");else{if(t+max<v||v<t+min)return;while(++p<=NR){if(v==t+a[p]){cnt++;print v"="y a[p]"("p")"}}}}{a[NR]=$1;N=NR;if(NR==1)max=min=$1;if(max<$1)max=$1;if(min>$1)min=$1;printf $1"("NR"), "}END{print "\nmax="max", min="min;for(n=1;n<=NR;n++)x(v,n);print "got total:"cnt}' FILE
43.11(1), 56.27(2), 88(3), 7.22(4), 4.77(5), 38.59(6), 95.09(7), 64.04(8), 66.61(9), 54.99(10), 54.77(11), 34.83(12), 3.23(13), 4.75(14), 80.26(15), 12.9(16), 77.26(17), 28.17(18), 78.01(19), 68.87(20), 83.95(21), 12.29(22), 79.08(23),
max=95.09, min=3.23
275.32=43.11(1)+64.04(8)+12.9(16)+77.26(17)+78.01(19)
...
275.32=4.77(5)+38.59(6)+95.09(7)+34.83(12)+3.23(13)+4.75(14)+12.9(16)+68.87(20)+12.29(22)
got total:23


real    0m3.029s
user    0m1.720s
sys    0m0.068s

real    0m3.123s
user    0m1.820s
sys    0m0.124s

real    0m2.852s
user    0m1.748s
sys    0m0.096s

Note: run three times

论坛徽章:
0
12 [报告]
发表于 2015-03-03 13:50 |只看该作者
jason680 发表于 2015-03-03 12:35
@zsszss0000 @54nwq

Here you are with good performance

太厉害了,佩服,谢谢

论坛徽章:
0
13 [报告]
发表于 2015-03-03 13:52 |只看该作者
回复 6# cao627
谢谢帮助,你好厉害啊!


   

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
14 [报告]
发表于 2015-03-03 14:42 |只看该作者
回复 11# jason680


    虽然我没看懂,但是这段代码应该有问题
我把LZ的数据sort了一下,用这段代码出来结果就不一样了
  1. sort -n test | awk ... test

  2. ....

  3. got total:28
复制代码

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
15 [报告]
发表于 2015-03-03 14:43 |只看该作者
回复 11# jason680


   我用穷举算出来是42

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
16 [报告]
发表于 2015-03-03 14:46 |只看该作者
回复 11# jason680


    结果确实有问题, 不止 23 种组合.

论坛徽章:
0
17 [报告]
发表于 2015-03-03 14:50 |只看该作者
回复 15# goofool

确实结果是42种

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
18 [报告]
发表于 2015-03-03 14:51 |只看该作者
的确 我验证了下,也出现了你这种情况回复 14# goofool


   

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
19 [报告]
发表于 2015-03-03 14:52 |只看该作者
你穷举的方法是怎么样的?回复 15# goofool


   

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
20 [报告]
发表于 2015-03-03 14:56 |只看该作者
回复 19# zsszss0000


    把所有组合列出来,对每个组合求和,然后和275.32比较

不知道有没有好算法,这种太不讨好了,baidu半天也没找到
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP