본문 바로가기

카테고리 없음

순열 의 시간복잡도

다음 순열을 구하는덴 필요한 시간복잡도

 

- 포인트지점 을 찾는것 (즉, arr[point-1]>arr[point] 가  아닌 순간찾기)         O(n) 

 

- 포인트 지점 이후의 숫자들중 "arr[point-1]보다 크면서" "그중 가장 작은 숫자" 찾기,

    arr[n-1]부터 앞으로 가면서 가장 먼저 나오는 숫자이다.                          O(n)

 

- 포인트지점과  방금찾은 수 swap                                                        O(1)

 

- 포인트지점 이후의 숫자들 꺼꾸로 해주기  맨앞맨뒤 바꿔가면된다.              O(n)

 

 

각각의 O(n)들은 독립적이므로  O(3n+1) = O(n)이다.

 

============================================

 

모든 순열을 찾는 방식

 

길이가 n인 수열의 갯수는 n!개이다.  

갯수 n!개에 대한 각각 다음 순열을 찾는데 걸리는 시간은 O(n)이다.

즉, 시간복잡도는   n! * O(n)  즉 n*n! 

 

   tip ) 모든 순열을 찾는데 걸리는시간이 크므로 수열의 길이 10이하일떄에는  모든 순열을 찾는 방법을 이용한다.

 

do{
	하고싶은계산
}while(  arr.start(), arr.end() ) );

==============================================