免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1378 | 回复: 2
打印 上一主题 下一主题

大家一起来想想这种算法? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-11 13:19 |只看该作者 |倒序浏览
我有一个文本文件file1,大概有100多行。
然后有另外一个文件file2,大概有100000行。
我想看file1中的记录在file2中出现的次数。
我通常是这样做的:

  1. while(<FILE1>) {
  2.       $hash{$_} = "0";
  3. }
  4. while(<FILE2>) {
  5.       $hash{$_}++ if(defined($hash{$_})); #这里直接用defined来检测记录是否在hash中命中,这里只有完全相等的时候才能命中。
  6. }
复制代码

上面代码能很迅速的解决问题。

但是我现在遇到的问题是:
file2中的记录不要求完全等于file1种记录,而只要求匹配即可。
比如file2有一条记录为:
abcde
file1中有一条记录为bcd
那么当读取到file2的这条记录(尽管这条记录不是==bcd)的时候,就算bcd命中了。

通常的方法可以通过循环来做:

  1. while(<FILE1>) {
  2.    $a[index++] = $_;
  3. }
  4. while(<FILE2>) {
  5.    $ln = $_;
  6.    for(0..index-1) {
  7.       if($ln =~ /$a[$_]/) {  #这里的循环太费时间了
  8.         $hash{$a[$_]}++;  #记录出现的次数
  9.       }
  10.    }
  11. }
复制代码


当file1比较大的时候,这里的循环是在是太浪费时间了,一直没有找到好的解决方案,不知道我说清楚没有,呵呵,希望这里的朋友给我些建议,谢谢。

[ 本帖最后由 zhao_yi707 于 2007-1-11 13:22 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-11 14:09 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2007-01-12 12:12 |只看该作者
谢谢,有人有法吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP