1use Time::HiRes; 2use marisa; 3 4my $time_begin = Time::HiRes::gettimeofday(); 5my @keys = <STDIN>; 6foreach my $key (@keys) { 7 chomp($key); 8} 9my $time_end = Time::HiRes::gettimeofday(); 10print "input: ", $time_end - $time_begin, "\n"; 11 12$time_begin = Time::HiRes::gettimeofday(); 13my %hash; 14foreach my $key (@keys) { 15 $hash{$key} = 0; 16} 17$time_end = Time::HiRes::gettimeofday(); 18print "hash_build: ", $time_end - $time_begin, "\n"; 19 20$time_begin = Time::HiRes::gettimeofday(); 21foreach my $key (@keys) { 22 $hash{$key}; 23} 24$time_end = Time::HiRes::gettimeofday(); 25print "hash_lookup: ", $time_end - $time_begin, "\n"; 26 27$time_begin = Time::HiRes::gettimeofday(); 28my $keyset = new marisa::Keyset; 29foreach my $key (@keys) { 30 $keyset->push_back($key) 31} 32$time_end = Time::HiRes::gettimeofday(); 33print "keyset_build: ", $time_end - $time_begin, "\n"; 34 35$time_begin = Time::HiRes::gettimeofday(); 36$trie = new marisa::Trie; 37$trie->build($keyset); 38$time_end = Time::HiRes::gettimeofday(); 39print "trie_build: ", $time_end - $time_begin, "\n"; 40 41$time_begin = Time::HiRes::gettimeofday(); 42my $agent = new marisa::Agent; 43foreach my $key (@keys) { 44 $agent->set_query($key); 45 $trie->lookup($agent); 46 $agent->key_id(); 47} 48$time_end = Time::HiRes::gettimeofday(); 49print "trie_agent_lookup: ", $time_end - $time_begin, "\n"; 50 51$time_begin = Time::HiRes::gettimeofday(); 52foreach my $key (@keys) { 53 $trie->lookup($key); 54} 55$time_end = Time::HiRes::gettimeofday(); 56print "trie_lookup: ", $time_end - $time_begin, "\n"; 57 58$time_begin = Time::HiRes::gettimeofday(); 59my $max_key_id = $trie->size() - 1; 60for (0..$max_key_id) { 61 $agent->set_query($_); 62 $trie->reverse_lookup($agent); 63 $agent->key_str(); 64} 65$time_end = Time::HiRes::gettimeofday(); 66print "trie_agent_reverse_lookup: ", $time_end - $time_begin, "\n"; 67 68$time_begin = Time::HiRes::gettimeofday(); 69for (0..$max_key_id) { 70 $trie->reverse_lookup($_); 71} 72$time_end = Time::HiRes::gettimeofday(); 73print "trie_reverse_lookup: ", $time_end - $time_begin, "\n"; 74 75$time_begin = Time::HiRes::gettimeofday(); 76foreach my $key (@keys) { 77 $agent->set_query($key); 78 while ($trie->common_prefix_search($agent)) { 79 $agent->key_str(); 80 } 81} 82$time_end = Time::HiRes::gettimeofday(); 83print "trie_agent_common_prefix_search: ", $time_end - $time_begin, "\n"; 84 85$time_begin = Time::HiRes::gettimeofday(); 86foreach my $key (@keys) { 87 $agent->set_query($key); 88 while ($trie->predictive_search($agent)) { 89 $agent->key_str(); 90 } 91} 92$time_end = Time::HiRes::gettimeofday(); 93print "trie_agent_predictive_search: ", $time_end - $time_begin, "\n"; 94