알고리즘

임의의 순서로 이루어진 순열 얻기

조규현15 2015. 2. 10. 18:00
반응형

배열을 임의의 순서로 뒤바꾸기 위해서는 여러 알고리즘을 사용한다.


1. PERMUTE_BY_SORTING


PERMUTE_BY_SORTING

1    n <- length[A]

2    for i <- 1 to n

3        do P[i] = RANDOM(1,n^3)

4    return A


array[A] = <1,2,3,4>

array[P] = <36,3,97,19>

result : array[A] = <2,4,1,3>


> n^3를 얻는 이유는 P의 모든 우선순위들이 서로 다른 값을 가지기 위해서이다( 1- 1/n)


동일한 순열을 얻게 되는 확률은 1/n!

Time : 오메가( n lg n)


2. RANDOMIZE-IN-PLACE


RANDOMIZE-IN-PLACE

1    n <- length[A]

2    for i <- 1 to n

3        do A[i] <-> A[ RANDOM( i , n ) ]


순열은 모두 n!/(n-k)!개가 존재한다.

확률은 1/n!

Time : 오메가( n )


> 균등순열을 얻는 확률로 A[i]가 j번째에 존재하는 확률이 1/n으로는 부족하다.

> 개인적으로 쓰는 알고리즘은 2. RANDOMIZE-IN-PLACE이다.

반응형

'알고리즘' 카테고리의 다른 글

사각형 그리기  (0) 2015.02.13
더블 버퍼링  (0) 2015.02.12
현재 화면에 맞춰 이미지 크기 변경  (0) 2015.02.10
XOR 교체 알고리즘  (0) 2015.01.29
오브젝트를 생성하고 삭제하는 문제  (0) 2015.01.08