【发布时间】:2017-11-16 17:34:25
【问题描述】:
我有一个HashMap如下-
HashMap<String, Integer> BC = new HashMap<String, Integer>();
它存储为键-“令牌/标签”和值-“每个令牌/标签的频率”。
例子-
"the/at" 153
"that/cs" 45
"Ann/np" 3
我现在解析每个键并检查是否对同一个标记说“the”,它是否与多个标签相关联,然后取两者中最大的一个。
例子-
"the/at" 153
"the/det" 80
然后我拿钥匙-"the/at" 和价值-153。
我为此编写的代码如下-
private HashMap<String, Integer> Unigram_Tagger = new HashMap<String, Integer>();
for(String curr_key: BC.keySet())
{
for(String next_key: BC.keySet())
{
if(curr_key.equals(next_key))
continue;
else
{
String[] split_key_curr_key = curr_key.split("/");
String[] split_key_next_key = next_key.split("/");
//out.println("CK- " + curr_key + ", NK- " + next_key);
if(split_key_curr_key[0].equals(split_key_next_key[0]))
{
int ck_v = 0, nk_v = 0;
ck_v = BC.get(curr_key);
nk_v = BC.get(next_key);
if(ck_v > nk_v)
Unigram_Tagger.put(curr_key, BC.get(curr_key));
else
Unigram_Tagger.put(next_key, BC.get(next_key));
}
}
}
}
但是这段代码的计算时间太长了,因为原始的 HashMap 'BC' 有 68442 个条目,大约是它的平方 = 4684307364 次(加上更多)。
我的问题是——我可以使用更有效的方法完成相同的输出吗?
谢谢!
【问题讨论】: