2014-04-11 2 views
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 문의 처음 세 줄은 모두 모두 O (1) 개입니다. 그런 다음이 메소드는 반복적으로 자신을 호출하고 함수가 작아 질 때마다 n (n-1) (n-2) ... 번 반복합니다. 그래서 내 대답은 O (n!)이 방법입니다. 나 맞아?

편집 : 유사한 구문하지만, 연결리스트 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); 
    } 
} 

답변

2

와.

당신은 요소를 n/2 번 교환 : (0 N-1), (1, N-2), (N/2-1와 N/2 + 1)

+0

그래서 않습니다 재귀 호출 이 경우 시간 복잡성에 영향을주지 않습니까? – user3521441

+0

전혀 아닙니다. 함수는 "while (start

+0

오케이 .. 빅 오 표기법에 대한 내 이해가 그다지 강하지는 않지만 다소 이해합니다. 이것이 링크 된 목록을 뒤집어 놓은 비슷한 구문을 가진 방법이라면 시간 복잡도는 어떻게 변할 것입니까? – user3521441