버티컬 스틱 챌린지에 접근하는 방법


23

이 문제는 interviewstreet.com 에서 가져 왔습니다

세그먼트 끝 점이 및 가 되도록 선 세그먼트 를 나타내는 정수 의 배열이 제공 됩니다. 각 세그먼트의 상단에서 수평 광선이 왼쪽으로 쏘이고 다른 광선에 닿거나 y 축에 닿으면이 광선이 멈춘다 고 상상해보십시오. 우리는 n 개의 정수 의 배열을 구성합니다 . 여기서 는 세그먼트 의 상단에서 촬영 한 광선 길이와 같습니다 . 우리는 정의 .Y={y1,...,yn}ni(i,0)(i,yi)v1,...,vnviiV(y1,...,yn)=v1+...+vn

예를 들어 인 경우 아래 그림과 같이 :Y=[3,2,5,3,3,4,1,2][v1,...,v8]=[1,1,3,1,1,3,1,2]

여기에 이미지 설명을 입력하십시오

의 각 순열 에 대해 계산할 수 있습니다 . 의 균일 랜덤 순열 를 선택하면 의 예상 값은 얼마입니까?[ 1 , . . . , N ] V ( Y , P 1 , . . . , Y (P)의 N ) P [ 1 , . . . , N ] V ( Y , P 1 , . . . , Y (P)의 N )p[1,...,n]V(yp1,...,ypn)p[1,...,n]V(yp1,...,ypn)

순진한 접근 방식을 사용하여이 문제를 해결하면 효율적이지 않고 동안 실제로 영원히 실행 됩니다. 각 스틱에 대해 의 예상 값을 무의식적으로 계산 하여이 문제에 접근 할 수 있다고 생각 하지만이 문제에 대한 또 다른 효율적인 접근법이 있는지 알아야합니다. 각 스틱의 예상 값을 독립적으로 계산할 수있는 기준은 무엇입니까?v in=50vi


기대의 선형성을 사용할 수 있습니다. 이 질문은 수학에 더 적합 할 것입니다 .SE

답변:


23

다른 문제를 상상해보십시오 슬롯 에 같은 높이의 스틱 을 배치 스틱 사이의 예상 거리 (및 첫 번째 스틱과 기본 슬롯 사이의 예상 거리 및 마지막 스틱과 명목 사이의 예상 거리 슬롯 )은 이며, 길이 에 맞는 간격 이 있기 때문 입니다.n 0 n + 1 n + 1kn0n+1n+1k+1k+1n+1

이 문제로 돌아와서 특정 스틱은 스틱을 포함하여 얼마나 많은 스틱이 높은지에 관심이 있습니다. 이 숫자가 이면 왼쪽으로 예상되는 간격도 입니다.kn+1k+1

따라서 알고리즘은 단순히 각 스틱에 대해이 값을 찾고 기대치를 더하는 것입니다. 예를 들어, 높이가 시작하면 높이가 같거나 같은 스틱의 수는 기대 값은 입니다.[3,2,5,3,3,4,1,2][5,7,1,5,5,2,8,7]96+98+92+96+96+93+99+98=15.25

이것은 프로그래밍하기 쉽다 : 예를 들어 R에서 한 줄

V <- function(Y){ (length(Y) + 1) * sum( 1 / (rowSums(outer(Y, Y, "<=")) + 1) ) }

원래 문제샘플 출력 값을 제공합니다.

> V(c(1,2,3))
[1] 4.333333
> V(c(3,3,3))
[1] 3
> V(c(2,2,3))
[1] 4
> V(c(10,2,4,4))
[1] 6
> V(c(10,10,10,5,10))
[1] 5.8
> V(c(1,2,3,4,5,6))
[1] 11.15

1
매우 흥미로운. 스틱 사이의 예상 거리가 이유에 대해 조금 자세히 설명해 주시겠습니까 ? 그것이 어떻게 계산되었는지 명확하지 않기 때문에 (적어도 나에게). 고맙습니다. (n+1)/(k+1)
M. Alaggan

동일한 높이 스틱 의 첫 번째 경우 에는 길이가 n + 1 이며 k + 1 갭 으로 채워져 평균 갭이 서로 나누어집니다. 이것은 특정 스틱 이전 (및 마지막 스틱에서 n + 1까지 ) 의 예상 간격 (또는 수평 광선 )입니다. 특정 스틱보다 높거나 높은 스틱을 고려하여 원래 질문으로 이동합니다. kn+1k+1n+1
Henry

아주 좋아요 이것은 내 솔루션을 완전히 포함합니다. 모든 높이가 다른 경우 . E[V]=k=1nn+1k+1=(n+1)(Hn+11)=(n+1)Hnn
JeffE

2
@ 헨리 (Henry) : k 스틱의 높이가 같고 슬롯이 n 개인 문제의 경우 평균 길이 = (n + 1) / (k + 1)에 대한 추론은 무엇입니까? k 개의 스틱이 있고 n 개의 슬롯에있는 k 개의 스틱의 모든 순열에서 해당 스틱 중 하나의 평균 광선 길이를 알고 싶다면 실제로는 결과와 동일하지만 그 이유를 이해하지 못합니다. 논리가 있습니까? 아니면 1 개의 스틱 및 n 슬롯에 대해 설명한 다음 2 개의 스틱 및 n, 슬롯, ... k 스틱, n 슬롯에 대해 수학적으로 추론하고 (n + 1) / ( k + 1)? n + 1 슬롯 추가를 언급했습니다. 그것은 매우 반 직관적 인 것 같습니다.
Alexandre

3
내가 전에 다루었던 질문입니다. 석과 k + 1 인 원탁으로 시작하여 무작위로 앉으십시오. 개인 사이의 거리는 분명히 평균 ( n + 1 ) / ( k + 1 )으로 iid입니다 . 이제 n + 1 번째 사람 의 테이블을 깰 사람과 좌석을 제거하고 테이블을 똑바로하십시오. 이제 당신은 여기에 n 석과 k 명이 있지만 동일한 iid 속성과 동일한 평균에 대한 질문이 있습니다 . (한 달 동안 희귀 한 운율을 파악 )n+1k+1(n+1)/(k+1)n+1thnk
Henry

11

Henry의 솔루션 은이 솔루션 보다 단순하고 일반적입니다!


는 무작위 퀵 정렬에 의해 수행되는 예상 비교 수의 대략 절반입니다.E[V]

스틱의 높이가 다르다고 가정하면 다음과 같이 대한 폐쇄 형 솔루션을 도출 할 수 있습니다 .E[Y]

임의의 인덱스를 들어 , 있도록 X I J = 1 경우 Y의 j는 = 최대 { Y I , . . . , Y의 J }X I , J = 0 , 그렇지. (소자의 경우 Y는 되어 있지 구별하고 X I J = 1 것을 의미 Y의 j는 이고 엄격 의 모든 요소보다 { Y의 IijXij=1Yj=max{Yi,...,Yj}Xij=0YXij=1Yj ).{Yi,,Yj1}

그런 다음 모든 인덱스 에 대해 v j = j i = 1 X i j (이유가 보입니까?)이므로 V = n j = 1 v j = n j = 1 j i = 1 X i j .jvj=i=1jXij

V=j=1nvj=j=1ni=1jXij.

기대 선형성 즉시 것을 의미

E[V]=E[1ijnXij]=1ijnE[Xij].

때문에 하나이고 0 또는 1 , 우리가 E [ X I J ] = [ X I J = 1 ]를 .Xij01E[Xij]=Pr[Xij=1]

최종적하고 이것이 중요하기 때문에 비트의 값 있는 별개의 균일 순열의 집합의 각 요소 { Y I , . . . , Y의 j는 } 될 확률이 동일하다 부분 집합의 요소. 따라서 Pr [ X i j = 1 ] = 1Y{Yi,...,Yj} 입니다. (Y의 원소가명확하지 않은경우에도Pr[Xij=1]1Pr[Xij=1]=1ji+1Y )Pr[Xij=1]1ji+1

그리고 이제 우리는 약간의 수학을합니다. 여기서Hnn번째고조파 수를나타냅니다.

E[V]=j=1ni=1jE[Xij][linearity]=j=1ni=1j1ji+1[uniformity]=j=1nh=1j1h[h=ji+1]=h=1nj=hn1h[1hjn]=h=1nnh+1h=((n+1)h=1n1h)(h=1n1)=(n+1)Hnn
Hnn

이제 O ( n ) 시간 에서 (부동 소수점 정밀도까지) 를 계산하는 것은 쉽지 않습니다.E[V]O(n)


스틱의 높이가 다르다고 가정합니까?
Aryabhata

그렇습니다. 높은 높이를 가정합니다. (분명히, 나는 질문을 잘못 읽었습니다.) 무작위 퀵 정렬과의 동등성은 여전히 ​​관계가 있지만 폐쇄 형 솔루션이 아닌 경우에도 유효합니다.
JeffE

4

주석에서 언급했듯이 기대 선형성을 사용할 수 있습니다.

정렬합니다 : y 1y 2y n .yy1y2yn

의 기대 값을 고려 브이 = E [ V I ] .yivi=E[vi]

그런 다음 E[i=1nvi]=i=1nE[vi]

한 직선적 순진한 방법 계산하는 에 대한 위치 픽스 제 것 Y I . j 말해봐 .E[vi]yij

이제 위치에서 y i 값을 가질 확률을 계산하십시오 .j1yi

그 다음에 확률 것을 가 값이 < Y I 및 하나 J - 2 는 값이 Y I을j1<yij2yi

그래서하는 당신이 계산 할 수 있도록 .E[vi]

실제로 수학을하고 공식을 얻으면 더 빨리 만들 수 있습니다 (그러나 직접 시도하지는 않았습니다).

희망이 도움이됩니다.


3

@Aryabhata의 답변을 확장 :

수정 하고 항목 y i 가 위치 j에 있다고 가정합니다 . 높이의 정확한 값은 중요하지 않으며 , 중요한 것은 항목이 y i 이상인지 여부입니다. 따라서 상품의 세트 고려 Z ( I ) , Z ( I ) K가 1 인 경우를 KY Z ( I ) K는 달리 0이다.iyijyiZ(i)zk(i)ykyizk(i)

집합 순열은 집합 Y 의 해당 순열을 유도합니다 . 예를 들어, 세트 Z ( i )의 "01000 (1) "의 순열을 고려하십시오 . 항목 z ( i ) i 는 위치 j 에서 대괄호이며 " " 로 표시된 항목 은 중요하지 않습니다.Z(i)YZ(i)zi(i)j

후 1을 더한 바로 왼쪽 consective 제로의 런 길이 Z ( I ) I . 이 것을 다음과 E는 ( V I ) 우리가 가장에서 선택하는 경우 "1"첫째 때까지, 만족, 실제로 1 더하기 연속 zeors의 예상 길이 J - 1 개 비트를 설정에서 Z ( I )vizi(i)E(vi)j1Z(i)zi(i)(교체없이). 이것은 대체되지 않고 (그리고 제한된 수의 추첨) 것을 제외하고는 기하학적 분포를 연상시킵니다. 기대가 촬영 될 뿐만 아니라 위치의 세트에 균일 선택으로, { 1 , ... , N } .j {1,,n}

이것이 계산되면 ( 이 라인들 사이에서 ) @Aryabhata의 답변 라인을 따를 수 있습니다.


-2

나는 당신이 무엇을 수정하는지 이해하지 못합니다. 태그에서 알고리즘을 찾고있는 것 같습니다.

그렇다면 예상되는 시간 복잡도는 얼마입니까? "순진한 접근 방식을 사용하여이 문제를 해결하면 효율적이지 않으며 n = 50 동안 실질적으로 영원히 실행됩니다." 순진한 접근 방식으로 기하 급수적으로 해결하는 것 같습니다.

나는 O (n ^ 2) 알고리즘을 염두에두고있다.

assume int y[n], v[n] where v[i] initialized with 1; as described in the question
for (i=1;i<n;i++) 
   for ( j=i-1 ; j>=0 && y[j]<y[i] ; j--) v[i]++;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.