給出文件中的一些字符串ab,abc,ad,ace,ddd ...,以確定某些字符串S是否在字符串中。如果我想用哈希來檢查是否存在S.算法分析:由於每個'put'操作都需要O(1)* K時間,其中K是字符串的長度,所以建立該地圖需要O(n * K)時間,其中n是字符串的數量。查找需要一定的時間,所以總體時間是O(n * k)。這是正確的想法嗎?雖然我們經常說散列表允許不斷查找時間,但它通常會忽略構建散列所花費的時間。當回答這樣的問題時,我應該說時間複雜度是O(n * k)還是O(n)?非常感謝。剛開始學習算法分析。分析這個簡單算法的正確方法
String line = null;
BufferedReader br = new BufferedReader(new File("file.txt"));
HashMap<String, Integer> strs = new HashMap<String,Integer>();
while((line=br.readLine()) != null){
Integer count = strs.get(line);
if(count == null){
strs.put(line, 1);
}
count++;
}
// Suppose the string to be checked is "str";
if(strs.contains(str)){
return true;
}
return false;
讓我們忽略我的代碼。一個文件包含一個字符串列表並檢查字符串中是否存在一個字符串。使用HashMap,時間複雜度是多少?這就是我想要回答的。對不起,這個問題。 – user697911
「K」意思是字符串的平均長度。 – user697911
編輯後給出以算法爲中心的答案,而不是以大-o以句法爲中心的答案:) – user1445967