- 论坛徽章:
- 0
|
我想做的是在一个网络中从某个给定的节点开始查找通路,查找条件是这样子的:从一个节点开始,其相邻节点的betweenness值最大的那个点作为下一个节点,再重复此过程,直到通路的终点。- use strict;
- use warnings;
- my ($seeds,$j,$bigger);
- my (@path,@protein,@select_temp);
- my %protein_betweenness;
- #将每个蛋白质的betweenness存入一个hash表中。
- open(my $protein_betweenness,"protein_betweenness.txt")or die $!;
- while(my $pro_bet = <$protein_betweenness>){
- chomp($pro_bet);
- my @pro_bet_temp = split/\t/,$pro_bet;
- $protein_betweenness{$pro_bet_temp[0]} = $pro_bet_temp[1];
- }
- close($protein_betweenness);
- #将邻接表存入一个二维数组。
- open(my $path_list,"Adjacency_List.txt")or die $!;
- while(my $path = <$path_list>){
- chomp($path);
- my @temp = split/\t/,$path;
- my @add =[$temp[0],$temp[1]];
- push @protein,@add;
- }
- close($path_list);
- #以seeds.txt中的数据作为起始点,开始查找通路。
- open(my $seeds_list,"seeds_list_test.txt")or die $!;
- open(OUTPUT,">>betweenness_path_list_3.txt")or die $!;
- while($seeds = <$seeds_list>){
- chomp($seeds);
- $j = 0;
- @select_temp = ();
- &find_next_protein($seeds);
- for my $i(0 .. $#path){ #该for循环用于输出数组path
- print OUTPUT "$path[$i]\t";
- }
- print OUTPUT "\n";
- @path = ();
- }
- close();
- #实现通路查找。
- sub find_next_protein{
- if($j <= $#protein){
- if($protein[$j][0] eq $seeds){
- push @path,$seeds;
- &select_seeds_protein($protein[$j][1]);
- if($seeds){
- $j = 0;
- @select_temp = ();
- &find_next_protein($seeds);
- }
- }else{
- $j++;
- &find_next_protein($seeds);
- }
- }
- }
- #选择下一个节点。
- sub select_seeds_protein{
- my %hash;
- my @next_temp = split/ /,$protein[$j][1];
- for(@next_temp){
- $hash{$_} = 1;
- }
- for(@path){
- $hash{$_} = 0;
- }
- for(sort keys %hash){
- if($hash{$_} ==1){
- push(@select_temp,$_);
- }
- }
- if(@select_temp){
- my $max_pro = &max(@select_temp);
- $seeds = $max_pro;
- }else{
- $seeds = "";
- }
- }
- #找出betweenness最大的邻居蛋白。
- sub max
- {
- $bigger =shift @_; #将数组中最左边的元素给$bigger;
- for (my $k = 0;$k <= $#_;$k++){
- if($protein_betweenness{$_[$k]} > $protein_betweenness{$bigger}){
- $bigger = $_[$k];
- }
- }
- $bigger;
- }
复制代码 但程序跑不到一行就报内存溢出~~(本人电脑是1G内存的)
有什么方法可以减少内存使用么? |
|