若是隻須要查詢一次, 那就直接作;若是要屢次查詢,並且要查詢各類不一樣的單詞,那就先預處理一遍, 接下來就只須要用O(1)的時間進行查詢。java
只查詢一次優化
遍歷這本書的每一個單詞,計算給定單詞出現的次數。時間複雜度O(n),咱們沒法繼續優化它, 由於書中每一個單詞都須要訪問一次。固然,若是咱們假設書中的單詞是均勻分佈, 那咱們就能夠只統計前半本書某個單詞出現的次數,而後乘以2; 或是隻統計前四分之一本書某個單詞出現的次數,而後乘以4。這樣能計算出一個大概值。 固然,單詞均勻分佈這個假設太強了,通常是不成立的。get
屢次查詢io
若是咱們要對一本書進行屢次的查詢,就能夠遍歷一次這本書的單詞, 把它出現的次數存入哈希表中。查詢的時候便可用O(1)的時間完成。table
package com.NodePair;
import java.util.HashMap;
public class Frequency {
HashMap<String,Integer> setupDictionary(String[] book)
{
HashMap<String,Integer> table=new HashMap<String,Integer>();
for(String s:book)
{
s=s.toLowerCase();
if(!table.containsKey(s))
{
table.put(s,0);
}
table.put(s, table.get(s)+1);
}
return table;
}
int getFrequency(HashMap<String,Integer> table,String word)
{
if(table==null||word==null)
return -1;
word=word.toLowerCase();
if(table.containsKey(word))
{
return table.get(word);
}
return 0;
}
}class