的複雜性我試圖從破解代碼採訪本書壓縮串做一個exercice:時間串壓縮算法
實現方法進行使用 重複字符計數基本字符串壓縮。例如,字符串aabcccccaaa將變爲 a2blc5a3。如果「壓縮」字符串不會小於原始字符串 ,那麼您的方法應返回原始字符串。
由作者給出的第一個命題是:
public static String compressBad(String str) {
int size = countCompression(str);
if (size >= str.length()) {
return str;
}
String mystr = "";
char last = str.charAt(0);
int count = 1;
for (int i = 1; i < str.length(); i++) {
if (str.charAt(i) == last) {
count++;
} else {
mystr += last + "" + count;
last = str.charAt(i);
count = 1;
}
}
return mystr + last + count;
}
關於thie算法的時間複雜度,她說:
運行時間爲0(P + K^2),其中p是原始字符串的大小,k是字符序列的數量。例如,如果字符串是aabccdeeaa,那麼有六個字符序列。這是緩慢的,因爲字符串連接在0(N^2)時間
我有兩個主要問題操作:
1)爲什麼時間複雜度爲O(P + K^2),它應該是唯一的O(p)(其中p是字符串的大小)否?因爲我們只做p迭代而不是p + k^2。
2)爲什麼字符串連接的時間複雜度是0(n^2)? 我認爲,如果我們有一個string3 = string1 + string2,那麼我們有一個複雜的大小(string1)+大小(string2),因爲我們必須創建兩個字符串的副本,然後將它們添加到一個新的字符串(創建一個字符串是O(1))。所以,我們會有一個增加不是乘法,不是嗎?這對數組來說不是一回事(例如,如果我們使用char數組)?
您能澄清這些問題嗎?我不明白我們如何計算複雜度...