利用施瓦茨排序获得范围数据的并集
来源:互联网 发布:mac 粉色口红 编辑:程序博客网 时间:2024/05/22 15:41
有一个文件gi.txt是这样的:
abc 38449 25480-25548 25189-25245
abc 24548 6408-6446
abc 209928 28985-29312 29715-29736
abc 396277 205294-205311 394789-394806
abc 290118 77218-77253 77229-77252 75108-75149 156363-156367
abc 80224 49817-49857 49748-50117 50691-50873
abc 312761 202142-202149 202149-202154 13601-13637
abc 2324 1-2 2-5 8-123 4-6 7-23
abc 22443 9571-9578 9365-9384 8731-8756 9472-9532 8723-8756 9105-9115
abc 2134 8-19 2-7
对于第三列,我们想把有交集的数据范围,合并成一个。比如1-5 、3-8 合成的并集为1-8.诸如此类。
在perl中,利用施瓦茨排序,然后通过数组前后两个元素的比较,就可以容易的获得想要的结果。
笔者的代码如下:
#! /usr/bin/perl -wuse strict;die "perl $0 gi.txt \n" unless @ARGV==1;my $gi=shift;open IN,$gi||die;while(<IN>){ chomp; my @a=split/\t/,$_; my @p=split/\s+/,$a[2]; my @p_sort=map{$_->[0]} sort{$a->[1] <=>$b->[1]||$a->[2] <=> $b->[2]} map{[$_,split/-/]}@p; for(my $i=0;$i<$#p_sort;$i++){ my ($b1,$e1)=split/-/,$p_sort[$i]; my ($b2,$e2)=split/-/,$p_sort[$i+1]; if($b2<=$e1 && $e2>=$e1||$b2-$e1==1){ $p_sort[$i+1]="${b1}-$e2"; $p_sort[$i]=""; } if($b2<=$e1 && $e2<$e1){ $p_sort[$i+1]=$p_sort[$i]; $p_sort[$i]=""; } } my $out; my @new=grep{!/^$/}@p_sort; $out.="$_ " for@new; chop$out; print "$a[0]\t$a[1]\t$out\n";}close IN;
运行结果如下:
abc 38449 25189-25245 25480-25548
abc 24548 6408-6446
abc 209928 28985-29312 29715-29736
abc 396277 205294-205311 394789-394806
abc 290118 75108-75149 77218-77253 156363-156367
abc 80224 49748-50117 50691-50873
abc 312761 13601-13637 202142-202154
abc 2324 1-123
abc 22443 8723-8756 9105-9115 9365-9384 9472-9532 9571-9578
abc 2134 2-19
- 利用施瓦茨排序获得范围数据的并集
- PHP利用CURL方法模拟POST提交数据并获得返回值的小细节
- 获得指定范围的随机数
- Android 获得联系人并排序
- android利用BitMap获得图片的像素数据
- 利用java从服务器中获得所需要的数据
- android利用BitMap获得图片的像素数据
- 利用org.json处理获得的json数据
- cell上面的button点击跳转并获得数据
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-3结合caffe中的CIFAR10修改相关配置文件并训练
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-1.制作自己的数据集
- 基本数据的范围
- 计算机语言的数据范围
- 各个数据的范围
- ABAP获得域的值范围
- 利用树集进行数据排序
- 利用链表将数据排序
- 海量小范围数据排序(位图)
- ReportStudio入门教程(七十八) - JS-禁止右键单击功能
- C++异常处理示例
- Android Volley框架的几种post提交请求方式
- 经典递归算法之排列,组合,集合和换零钱, Python yield实现.
- 在linux系统上搭建QT移植mini2440步骤
- 利用施瓦茨排序获得范围数据的并集
- iOS中的生成随机数方法
- 东软学习,oracle函数与触发器2
- TabHost导致百度定位功能失效
- 企业inhouse网页发布流程
- Spring AOP原理及拦截器
- 常犯错误总结
- TIPTOP GP5打印报表时如何在水晶报表中显示服务器上的图片
- Thinkphp ajax返回值