버블 정렬에서 예상되는 스왑 수


14

정수로 구성된 배열 A 가 주어지면, 배열 각 요소는 확률 , 0 i < n 으로 고정 된 수 만큼 증가 할 수 있습니다 . bubble sort 사용하여 배열을 정렬하기 위해 예상되는 스왑 수를 찾아야합니다 .b p [ i ]Nbp[i]0i<n

나는 다음을 시도했다.

  1. 요소의 확률 [ I ] > [ J ] 에 대한 I < J는 지정된 확률에서 쉽게 계산 될 수있다.A[i]>A[j]i<j

  2. 위의 내용을 사용하여 예상 스왑 수를 다음과 같이 계산했습니다.

    double ans = 0.0;
    for ( int i = 0; i < N-1; i++ ){
        for ( int j = i+1; j < N; j++ ) {
            ans += get_prob(A[i], A[j]); // Computes the probability of A[i]>A[j] for i < j.
    

기본적으로 스왑 수는 배열의 반전 수로 계산할 수 있기 때문에이 아이디어를 얻었습니다. 따라서 주어진 확률을 사용하여 숫자 A[i] 를 숫자 로 바꿀지 여부를 계산합니다 A[j].

초기 배열 요소는 정렬되거나 정렬되지 않은 순서로 정렬 될 수 있습니다. 그런 다음 각 숫자는 약간의 확률로 변경 될 수 있습니다. 이 후 예상 스왑 수를 계산해야합니다.

나는 비슷한 질문을 전에 게시 했지만 모든 제약 조건이 없었습니다.

나는 올바른 길을 가고 있는지 여부에 대한 좋은 힌트를 얻지 못했기 때문에 여기에 모든 제약 조건을 나열했습니다. 내가 잘못된 방식으로 문제를 생각하고 있다면 힌트를주십시오.


6
제목에 귀여운 tpyo.
JeffE

N 정수, 각 요소 의 정렬 된 배열을 제공한다는 의미는 아닙니다 . 초기 배열의 숫자 범위와 b와 관련한 숫자의 차이도 누락 된 것으로 보입니다.
Danny Varod

이러한 종류의 분석을 위해서는 Bubblesort 아이디어를 고려할 때 어떤 특정 "구현"을 명확하게해야합니다. 의사 코드로 알고리즘을 제공하는 것이 가장 좋습니다.
라파엘

이 문제는 codechef 사이트 codechef.com/JULY12/problems/LEBOBBLE 에서 진행중인 컨테스트에서 비롯된 것입니다. 컨테스트 후에 내 방식을 게시하게되어 기쁩니다.
rizwanhudda

답변:


11

하자 는 다음과 같이 정의된다 :BubbleSort

for (j = A.length; j > 1; j--)
    for (i = 0; i < j - 1; i++)
        if (A[i] > A[i + 1])
            swap(i, i + 1, A)

일부 치환 주어 AN, 반전이 발생하는 경우, 상기 의 X J < X 일부 I < J . 우리는 B u b b l e S o r t 가 각 쌍에 대해 반전 검사를 수행하고, 그렇다면 스왑을 수행한다는 것을 알 수 있습니다. 하자 X는 스왑의 숫자. 최악의 경우 X = ( n 이 있음을 알기가 어렵지 않습니다.x1,,xnxj<xii<j.BubbleSortX 가능한 스왑 가능. 그러나 우리는BubbleSort에서 반전으로X를정의하여 계산할 수있는 예상 사례에 관심이 있습니다.X=(n2)XBubbleSort

이제 여기서 I i j 는 어떤 쌍 ( i , j )에 대한 반전이 존재하는 지표 변수입니다 . 기대치는 E [ X ] = E [ j i < j I i j ] = j i < j E [ I i j ]로 정의됩니다.X=ji<jIijIij(i,j)E[X]=E[ji<jIij]=ji<jE[Iij]. 이제 를 결정해야합니다 .P{Iij}

가능한 순열을 입력으로 가정 할 때 각각 균일 한 확률로 P { I i j } = 1 임을 알 수 있습니다. . 이에 대한 추론은 가능한 순열에서 시간의 절반xj<xi및 시간의 절반xi<xjforij이라는 것입니다.P{Iij}=12xj<xixi<xjij

우리의 기대 계산으로 돌아가서 우리는 이자형[엑스]=제이나는<제이이자형[나는나는제이]=제이나는<제이12=(2)12=(1)4

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.