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