Transcript Document

확률적 분석,
랜덤화된 알고리즘 -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)]
(i-1) –순열들 중 특정한 하나
배열 A[1..i-1]
i-1, 1, 3, 7, 9, ……
1, 6, 4, 5, 8, ……
i-1, 11, 6, 8, 3, ……
포함될 확률 (n-i+1)!/n!
Randomize-In-Place 증명
(i-1) –순열들 중 특정한 하나
배열 A[1..i-1]
i-1, 1, 3, 7, 9, ……
1, 6, 4, 5, 8, ……
포함될 확률 (n-i+1)!/n!
i-1, 11, 6, 8, 3, ……
i 번째 원소가 A[1..i]에 포함되는 사건이 일어날 확률
1/(n-i+1)
∴
1
(n  i  1)!
(n  i )!


n  i 1
n!
n!
Randomize-In-Place 증명
• 종료 조건 i = n+1 일 때,
(n-n)!/n! = 0!/n! = 1/n!
= A[1..n]배열에 임의 n-순열이 존재할 확률
∴ A[1..n]은 균등 임의 순열이고 이 알고리즘
은 균등 임의 순열을 생산한다.
생일 문제
• 최소 몇 명이 있어야 그들 중 두 명의 생일
이 같을 확률이 50% 이상이겠는가?
• 확률적 분석
• 지표 확률 변수를 통한 분석
확률적 분석
• 인원수를 k, 일년의 날짜수를 n 이라 하면
생일이 겹치지 않는 사건 Bk 에 대하여
k 1
Pr{Bk }  Pr{Bk 1} Pr{ Ak | Bk 1}
Pr{Bk }  e
 Pr{Bk  2 } Pr{ Ak 1 | Bk  2 } Pr{ Ak | Bk 1}
e
e
 ( k 1) n
e
 i 1 i / n
 e  k ( k 1) / 2 n  1 / 2

 Pr{B1} Pr{ A2 | B1} Pr{ A3 | B2 } Pr{ Ak | Bk 1}
 n 1   n  2   n  k 1 
 1 
 


n 
 n  n  
 1   2   k 1 
 1 1    1    1 

n 
 n  n 
1 / n  2 / n
∵생일이 겹치지 않을 확률이 높
아야 하므로 마지막 부등식 성립
 k (k  1) / 2n  ln( 1 / 2)
1 x  ex
k (k  1) 
2n ln 2
k


(1  1  (8 ln 2)n ) / 2
n  365 일때 k  23 (명)
지표 확률 변수를 통한 분석
k명 중 1≤i≤j≤k인 임의의 사람 i, j 에 대하여
• Xij = I{i 와 j 가 같은 생일을 갖는다.}
1
 
0
i와 j가 같은 생일을 갖는 경우 

그렇지 않은 경우
Pr{Xij}= 1/n
k
k
i
j i 1
전체 확률 변수 X    X ij
지표 확률 변수를 통한 분석
E[ X ] 

k k

E   X ij 
 i 1 j i 1 
k
k
  E[ X
i 1 j i 1


ij
]
k  1
 
 2 n
k (k  1)
2n
같은 생일을 갖는 사람들 쌍에 대한 기대값
k (k  1)

2n
일때
기대값이 1 이상이 된다.
즉, 생일이 같은 사람이 나오길
기대할 수 있다.
∴ n = 365일 때 식을 만족하는
최소의 정수 k = 28 (명)
공과 주머니
• 모든 주머니에 적어도 한 개의 공을 넣으
려면 몇 개의 공을 던져야 하는가?
• ni = i번째 주머니에 공을 넣기 위해 던진
횟수 라 할 때
b
총 횟수 n = i 1 ni
Pr{ni} = (b – i + 1) / b
공과 주머니
E[n]

b 
E  ni 
 i 1 

 E ni 
b
i 1



b
b

i 1 b  i  1
b
1
( i  b 부터 1까지 역으로 더해서)
i 1 i
b(ln b  O(1))
b
연속 발생
동전을 던져 계속 앞면이 나오는 연속 발생
중 기대값으로 가장 큰 것은?
n  2 lg n 1

Pr   Ai , 2 lg n  
 i 1


n  2 lg n 1
2
1
/
n

i 1

n
2
1
/
n

i 1

1/ n
상한 구하기
E[ L]

n
 j Pr{L j }
j 0

2 lg n 1
n
 j Pr{L j }  
j  2 lg n 
j 0

2 lg n 1
n
 (2lg n) Pr{L j }  
j  2 lg n 
j 0

j Pr{L j }
2 lg n 1
2 lg n 
 Pr{L j } 
j 0

2 lg n  1  n  (1 / n)

O (lg n)
n Pr{L j }
n
n

j  2 lg n 
Pr{L j }
하한 구하기
E[ L]

n
 j Pr{L j }
j 0

(lg n ) / 2 
 j Pr{L j } 
j 0

(lg n ) / 2 
 0  Pr{L j } 
j 0

(lg n) / 2
n

j  (lg n ) / 2 
n

j  (lg n ) / 2 
n

j  2 lg n 
j Pr{L j }
Pr{L j }

(lg n) / 2  (1  O(1 / n))

(lg n)
(lg n) / 2 Pr{L j }
온라인 고용 문제
• 전체를 보지 않고 단 한 번 고용하고 취소 없는
• 기존 고용 문제의 변형판
On-Line-Maximum(k,n)
1. bestscore <- -∞
2. For I <- 1 to k
3.
do if score(i) > bestscore
4.
then bestscore <- score(i)
5. For I <- k+1 to n
6.
do if score(i) > bestscore
7.
then return I
8. return n
온라인 고용 문제
Pr{S} 
성공적 고용 확률

n
k
1
dx 
x
n 1
1


i k i
n
 Pr{Si }
i  k 1
n

k

i  k 1 n(i  1)

k n 1

n i  k 1 i  1

k n 1 1

n i k i
n 1
1
k 1 x dx
k
k
(ln n  ln k )  PS{S}  (ln( n  1)  ln( k  1))
n
n
1
(하한을 최대화할 수 있는 k를 계산) (ln n  ln k  1)
n