反向矢量的大O时间复杂度

时间:2014-04-11 15:13:37

标签: c++ vector time complexity-theory

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(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);
  }
}

1 个答案:

答案 0 :(得分:2)

那是O(n)

您交换元素n/2次:(0与n-1),(1与n-2),...(n / 2 - 1与n / 2 + 1)