#!/usr/bin/perl -- # -*-PERL-*- use Data::Dumper; use Benchmark 'cmpthese'; my @data = ([1,2], [1,3], [2,3], [2,4], [3,4]); my @data_longrand = map { [ int( rand( 25 ) ), int( rand( 25 ) ) ] } 1 .. 10_000; cmpthese( 50_000, { ( map { $_ => qq[$_( \@data )] } qw/ pg scooterm ewijaya aighearach / ), ( map { $_.'_longrand' => qq[$_( \@data_longrand )] } qw/ pg scooterm ewijaya aighearach / ), }, ); sub pg { my %vertices; for my $i ( 0 .. $#_ ) { $vertices{$_[$i][$_]} = 1 for (0 .. $#{$_[$i]}); } return sort keys %vertices; } sub scooterm { my %hTemp; my @aTemp = map{@{$_}} @_; @hTemp{@aTemp} = (); return sort keys %hTemp; } sub aighearach { my ( %unique ); for ( my $i = 0; $i < @_; $i++ ) { @unique{@{$_[$i]}} = undef; } return sort keys %unique; } sub ewijaya { my @edges = @_; my @vertices; my @uniqv; for my $i ( 0 .. $#edges ) { for my $j ( 0 .. $#{$edges[$i]} ) { push @vertices, $edges[$i][$j]; } } @uniqv = sort keys %{{map {$_,1} @vertices}}; return @uniqv; } __END__