免费注册 查看新帖 |

Chinaunix

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

字符串计算区间覆盖度问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-08-18 15:17 |只看该作者
如果你堅持要用string

還有a-z, A-Z這樣的可以來代表大於9的數字

论坛徽章:
0
12 [报告]
发表于 2014-08-18 15:54 |只看该作者
已经改用hash做了,string貌似还是不科学

回复 11# afukada


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
13 [报告]
发表于 2014-08-18 16:08 |只看该作者
回复 8# papagogogo
希望可以解决你的问题.
  1. #!/usr/bin/perl
  2. #
  3. use warnings;
  4. use strict;
  5. use Number::Range;
  6. use Set::Scalar;

  7. my $file1 = "1.file";
  8. my $file2 = "2.file";
  9. my %hash1;
  10. my %hash2;

  11. open(FILE1, "<".$file1) or die("$file1, $!\n");
  12. while (my $line = <FILE1>) {
  13.     chomp $line;
  14.     my ($key, $start, $end) = split(/\s+/, $line);
  15.     if (defined $hash1{$key}) {
  16.         $hash1{$key} .= ",$start..$end";
  17.     } else {
  18.         $hash1{$key} = "$start..$end";
  19.     }
  20. }
  21. close(FILE1);

  22. open(FILE2, "<".$file2) or die("$file2, $!\n");
  23. while (my $line = <FILE2>) {
  24.     chomp $line;
  25.     my ($key, $start, $end) = split(/\s+/, $line);
  26.     if (defined $hash2{$key}) {
  27.         $hash2{$key} .= ",$start..$end";
  28.     } else {
  29.         $hash2{$key} = "$start..$end";
  30.     }
  31. }
  32. close(FILE2);

  33. foreach my $key (keys %hash1) {
  34.     my $range1 = Number::Range->new($hash1{$key});
  35.     my $range2 = Number::Range->new($hash2{$key});
  36.     my @number1 = $range1->range;
  37.     my @number2 = $range2->range;
  38.     my $set1 = Set::Scalar->new(@number1);
  39.     my $set2 = Set::Scalar->new(@number2);
  40.     my $setc = $set1->unique($set2);
  41.     my $setd = $set1->difference($setc);
  42.     print $set1, "\n";
  43.     print $set2, "\n";
  44.     print $setc, "\n";
  45.     print $setd, "\n";
  46. }
复制代码

论坛徽章:
0
14 [报告]
发表于 2014-08-18 16:17 |只看该作者
回复 12# papagogogo

其實我會比較希望知道你真正整個流程到底想得到什麼東西

"比方"說你做上面這些事情是想知道有哪些區域有3個以上的coverage

那你現在這個方法就會浪費很多不必要的時間跟記憶體空間

會有其他的方法可以得到你想要的答案

所以我才會回覆你

把你想要得到的結果說出來

也許可以不用用這種作法

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00
15 [报告]
发表于 2014-08-18 22:44 |只看该作者
BEDtools, coverageBED
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP