1*ab8db090SAndroid Build Coastguard Workerrequire "marisa" 2*ab8db090SAndroid Build Coastguard Worker 3*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 4*ab8db090SAndroid Build Coastguard Workerkeys = STDIN.read.split("\n") 5*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 6*ab8db090SAndroid Build Coastguard Workerprint "input: ", time_end - time_begin, "\n" 7*ab8db090SAndroid Build Coastguard Worker 8*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 9*ab8db090SAndroid Build Coastguard Workerhash = Hash.new 10*ab8db090SAndroid Build Coastguard Workerfor key in keys 11*ab8db090SAndroid Build Coastguard Worker hash[key] = 0 12*ab8db090SAndroid Build Coastguard Workerend 13*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 14*ab8db090SAndroid Build Coastguard Workerprint "hash_build: ", time_end - time_begin, "\n" 15*ab8db090SAndroid Build Coastguard Worker 16*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 17*ab8db090SAndroid Build Coastguard Workerhash = Hash.new 18*ab8db090SAndroid Build Coastguard Workerfor key in keys 19*ab8db090SAndroid Build Coastguard Worker hash[key] 20*ab8db090SAndroid Build Coastguard Workerend 21*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 22*ab8db090SAndroid Build Coastguard Workerprint "hash_lookup: ", time_end - time_begin, "\n" 23*ab8db090SAndroid Build Coastguard Worker 24*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 25*ab8db090SAndroid Build Coastguard Workerkeyset = Marisa::Keyset.new 26*ab8db090SAndroid Build Coastguard Workerfor key in keys 27*ab8db090SAndroid Build Coastguard Worker keyset.push_back(key) 28*ab8db090SAndroid Build Coastguard Workerend 29*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 30*ab8db090SAndroid Build Coastguard Workerprint "keyset_build: ", time_end - time_begin, "\n" 31*ab8db090SAndroid Build Coastguard Worker 32*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 33*ab8db090SAndroid Build Coastguard Workertrie = Marisa::Trie.new 34*ab8db090SAndroid Build Coastguard Workertrie.build(keyset) 35*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 36*ab8db090SAndroid Build Coastguard Workerprint "trie_build: ", time_end - time_begin, "\n" 37*ab8db090SAndroid Build Coastguard Worker 38*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 39*ab8db090SAndroid Build Coastguard Workeragent = Marisa::Agent.new 40*ab8db090SAndroid Build Coastguard Workerfor key in keys 41*ab8db090SAndroid Build Coastguard Worker agent.set_query(key) 42*ab8db090SAndroid Build Coastguard Worker trie.lookup(agent) 43*ab8db090SAndroid Build Coastguard Worker agent.key_str 44*ab8db090SAndroid Build Coastguard Workerend 45*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 46*ab8db090SAndroid Build Coastguard Workerprint "trie_agent_lookup: ", time_end - time_begin, "\n" 47*ab8db090SAndroid Build Coastguard Worker 48*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 49*ab8db090SAndroid Build Coastguard Workerfor key in keys 50*ab8db090SAndroid Build Coastguard Worker trie.lookup(key) 51*ab8db090SAndroid Build Coastguard Workerend 52*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 53*ab8db090SAndroid Build Coastguard Workerprint "trie_lookup: ", time_end - time_begin, "\n" 54*ab8db090SAndroid Build Coastguard Worker 55*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 56*ab8db090SAndroid Build Coastguard Workermax_key_id = trie.size() - 1 57*ab8db090SAndroid Build Coastguard Worker0.upto(max_key_id) { |i| 58*ab8db090SAndroid Build Coastguard Worker agent.set_query(i) 59*ab8db090SAndroid Build Coastguard Worker trie.reverse_lookup(agent) 60*ab8db090SAndroid Build Coastguard Worker agent.key_str 61*ab8db090SAndroid Build Coastguard Worker} 62*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 63*ab8db090SAndroid Build Coastguard Workerprint "trie_agent_reverse_lookup: ", time_end - time_begin, "\n" 64*ab8db090SAndroid Build Coastguard Worker 65*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 66*ab8db090SAndroid Build Coastguard Worker0.upto(max_key_id) { |i| 67*ab8db090SAndroid Build Coastguard Worker trie.reverse_lookup(i) 68*ab8db090SAndroid Build Coastguard Worker} 69*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 70*ab8db090SAndroid Build Coastguard Workerprint "trie_reverse_lookup: ", time_end - time_begin, "\n" 71*ab8db090SAndroid Build Coastguard Worker 72*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 73*ab8db090SAndroid Build Coastguard Workerfor key in keys 74*ab8db090SAndroid Build Coastguard Worker agent.set_query(key) 75*ab8db090SAndroid Build Coastguard Worker while trie.common_prefix_search(agent) 76*ab8db090SAndroid Build Coastguard Worker agent.key_str 77*ab8db090SAndroid Build Coastguard Worker end 78*ab8db090SAndroid Build Coastguard Workerend 79*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 80*ab8db090SAndroid Build Coastguard Workerprint "trie_agent_common_prefix_search: ", time_end - time_begin, "\n" 81*ab8db090SAndroid Build Coastguard Worker 82*ab8db090SAndroid Build Coastguard Workertime_begin = Time.now 83*ab8db090SAndroid Build Coastguard Workerfor key in keys 84*ab8db090SAndroid Build Coastguard Worker agent.set_query(key) 85*ab8db090SAndroid Build Coastguard Worker while trie.predictive_search(agent) 86*ab8db090SAndroid Build Coastguard Worker agent.key_str 87*ab8db090SAndroid Build Coastguard Worker end 88*ab8db090SAndroid Build Coastguard Workerend 89*ab8db090SAndroid Build Coastguard Workertime_end = Time.now 90*ab8db090SAndroid Build Coastguard Workerprint "trie_agent_predictive_search: ", time_end - time_begin, "\n" 91