5
這段代碼來自Cracking the Coding面試書。這個字符串操作代碼的空間複雜度是多少?
public static boolean isUniqueChars2(String str) {
boolean[] char_set = new boolean[256];
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i);
if (char_set[val]) return false;
char_set[val] = true;
}
return true;
}
而筆者提到,
時間複雜度爲O(n),其中n是字符串的長度,並 空間複雜度爲O(n)。
我理解的時間複雜度爲O(N),但我不明白怎麼會空間複雜度爲O(n)的
我的想法: char_set仍將大小爲256的數組無論什麼輸入(str)大小是。 即使「str」的長度爲100,000,char_set仍然是一個256個元素的數組。 所以我認爲,因爲這個函數的內存要求不會隨着輸入的大小而改變,並且保持恆定的256,所以空間複雜度是恆定的,即O(1)。
有人可以解釋,如果我錯了(並且,爲什麼?)
太謝謝你了。
我認爲你是對的,但是那個作者說那個原始的自我誇張的O(n)(或者你正在通過價值獲得一個副本?)。 – qPCR4vir 2013-02-20 23:26:29
嗯......多數民衆贊成在有趣的。我認爲,當推導漸近複雜性時,我們通常忽略輸入讀取的方式/位置/時間?只關注方法內部發生的事情(考慮到輸入的大小,即n) – anakkala 2013-02-20 23:32:56
我想看看作者的推理。算法本身使用的空間是恆定的。當我們分析空間複雜性時,我們談論的是處理所需的額外*空間量,忽略了算法的輸入。 – 2013-02-21 00:15:50