本帖最后由 pitonas 于 2014-08-09 12:36 编辑
A.pl:- #!/usr/bin/perl
- my $seq = 'CATTCATTCTCTAACAGCAGTAATATTAATAATTTTCAT';
- $seq x= 200000;
- my @tr = qw[
- K N K N T T T T R S R S I I M I
- Q H Q H P P P P R R R R L L L L
- E D E D A A A A G G G G V V V V
- _ Y _ Y S S S S _ C W C L F L F
- ];
- my @I = (
- [ [ 0, 1, 2, 3 ],
- [ 4, 5, 6, 7 ],
- [ 8, 9, 10, 11 ],
- [ 12, 13, 14, 15 ]
- ],
- [
- [ 16, 17, 18, 19 ],
- [ 20, 21, 22, 23 ],
- [ 24, 25, 26, 27 ],
- [ 28, 29, 30, 31 ]
- ],
- [
- [ 32, 33, 34, 35 ],
- [ 36, 37, 38, 39 ],
- [ 40, 41, 42, 43 ],
- [ 44, 45, 46, 47 ]
- ],
- [
- [ 48, 49, 50, 51 ],
- [ 52, 53, 54, 55 ],
- [ 56, 57, 58, 59 ],
- [ 60, 61, 62, 63 ]
- ]
- );
-
- $seq =~ y/ACGT/0123/;
- my @dna = split //, $seq;
- splice @dna, @dna - @dna % 3;
- print @tr[ TR(@dna) ];
- sub TR {
- map { $I[shift][shift][shift] } 0 .. $#_ / 3;
- }
复制代码 B.pl:- #!/usr/bin/perl
- my $seq = 'CATTCATTCTCTAACAGCAGTAATATTAATAATTTTCAT';
- $seq x= 200000;
- my @tr = (
- [ [qw/K N K N/], [qw/T T T T/], [qw/R S R S/], [qw/I I M I/] ],
- [ [qw/Q H Q H/], [qw/P P P P/], [qw/R R R R/], [qw/L L L L/] ],
- [ [qw/E D E D/], [qw/A A A A/], [qw/G G G G/], [qw/V V V V/] ],
- [ [qw/_ Y _ Y/], [qw/S S S S/], [qw/_ C W C/], [qw/L F L F/] ],
- );
-
- $seq =~ y/ACGT/0123/;
- my @dna = split //, $seq;
- splice @dna, @dna - @dna % 3;
- print TR(@dna);
- sub TR {
- map { $tr[shift][shift][shift] } 0 .. $#_ / 3;
- }
复制代码 A.pl: 2 operations
print @tr[ TR(@dna) ];
1: TR(@dna)
2: @tr[ ... ];
B.pl: only 1 operation
print TR(@dna);
1: TR(@dna)
A.pl:: @tr , B.pl:: @I ===> array: 4 x 4 x 4
why ??? {:2_170:}
B.pl slow than A.pl ?
|