免费注册 查看新帖 |

Chinaunix

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

请教文本处理:123与321合并为123 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2005-05-17 09:40 |只看该作者

请教文本处理:123与321合并为123

像apile兄描述的多位数变数情况,我如果要提高效率,那就得牺牲内存!如果要写出高效率的程序,真不容易啊,要不就是用效率换内存,要不就是用内存换效率,真是鱼与熊掌!
经过这么久的讨论,我得到如下结论:
1、程序不同于软件,软件要求适应多种恶劣情况,而程序可以只针对所要解决的问题。
2、效率和内存永远是一对矛盾
3、最优的程序是理想中的,折中是最终解决方案。
个人观点

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
42 [报告]
发表于 2005-05-17 10:08 |只看该作者

请教文本处理:123与321合并为123


  1. #!/usr/bin/perl
  2. open(FF,"in.txt");
  3. my %count = ();
  4. my %rem= ();
  5. my %num= ();
  6. while(<FF>;){
  7.   chomp;
  8.   $count{$_}++;
  9. }
  10. close(FF);
  11. my ($sys,$user) = times;
  12. print $sys+$user."\n";
  13. for my $key (keys %count){
  14.   my $ary = join "", sort {$a <=>;$b } split(//,$key);
  15.   $num{$ary}->;[0] +=$count{$key};
  16.   push(@{$num{$ary}->;[1]},$key) ;
  17. }
  18.                                                                                                                           
  19. for my $key (keys %num){
  20.   my ($min) = sort {$a <=>; $b} @{$num{$key}->;[1]};
  21.   print "$min =>; $num{$key}->;[0] \n";
  22. }
  23.                                                                                                                           
  24. ($sys,$user) = times;
  25. print $sys+$user."\n";
复制代码

這個會快很多...大概只要17秒....讀文件的時間最長....
如果一次讀進ram裡面保證可以再快很多..但是RAM要吃掉1G...:<
我的nb沒那麼多RAM...所以跑得很慢...
如果真的要求效率..文件在讀進來之前最好能先sort再count一下...:)
這樣代碼會變得很簡單....:)效率也會很高...

论坛徽章:
0
43 [报告]
发表于 2005-05-17 10:21 |只看该作者

请教文本处理:123与321合并为123

不错,到底是老大,信手拈来,写得很好啊!只不过有一点,保存了两份散列,还是用内存换回来的啊!

论坛徽章:
0
44 [报告]
发表于 2005-05-17 10:44 |只看该作者

请教文本处理:123与321合并为123

不过除此以外,也没有别的办法!如果不取存在值的最小值,只取理论最小值,程序要简单得多,可以不用冗余散列实现。但总的来说,apile的程序为最终解决方案,可以适应多种复杂情形!

论坛徽章:
0
45 [报告]
发表于 2005-05-17 10:59 |只看该作者

请教文本处理:123与321合并为123

我刚刚测试了一下apile兄的程序,四位数,100000行,读取文件2.05s,程序执行0.21s,总共花费2.26s。
速度相当快!
代码优化真是一门学问啊!
呵呵!!
感谢superdoctor兄提出问题,感谢apile兄的参与!

论坛徽章:
0
46 [报告]
发表于 2005-05-17 15:40 |只看该作者

请教文本处理:123与321合并为123

受益……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP