2
template <typename T>
void reverseVector(vector<T> &vec, int start, int end) {
if(start < end) {
char temp = vec[start];
vec[start] = vec[end];
vec[end] = temp;
reverseVector(vec, start + 1, end – 1); }
}
}
假設N = vec.size()這個方法的時間複雜度是多少?以大O爲反向矢量的時間複雜度
假設我是正確的,獲取和設置矢量的時間爲O(1)。因此,if語句中的前3行都是O(1)。然後,該方法遞歸地調用它自己,並且每次函數變小,迭代n(n-1)(n-2)...次。所以我的答案是O(n!)這種方法。我對麼?
編輯:類似的語法,但鏈表
template <typename T>
void reverseLinkedList(list<T> &lst, int start, int end) {
if(start < end) {
char temp = lst[start];
lst[start] = lst[end];
lst[end] = temp;
reverseLinkedList(lst, start + 1, end – 1);
}
}
如此做遞歸調用在這種情況下不會影響時間複雜度? – user3521441
根本不是。你的功能相當於'while(start
好吧..我對大哦符號的理解並不是那麼強烈,但我有點理解。如果這是一個具有相似語法的方法來顛倒鏈表,那麼時間複雜度將如何改變? – user3521441