정수로 구성된 배열 가 주어지면, 배열 의 각 요소는 확률 , 0 ≤ i < n 으로 고정 된 수 만큼 증가 할 수 있습니다 . bubble sort 사용하여 배열을 정렬하기 위해 예상되는 스왑 수를 찾아야합니다 .b p [ i ]
나는 다음을 시도했다.
요소의 확률 [ I ] > [ J ] 에 대한 I < J는 지정된 확률에서 쉽게 계산 될 수있다.
위의 내용을 사용하여 예상 스왑 수를 다음과 같이 계산했습니다.
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.
기본적으로 스왑 수는 배열의 반전 수로 계산할 수 있기 때문에이 아이디어를 얻었습니다. 따라서 주어진 확률을 사용하여 숫자 를 숫자 로 바꿀지 여부를 계산합니다 .
초기 배열 요소는 정렬되거나 정렬되지 않은 순서로 정렬 될 수 있습니다. 그런 다음 각 숫자는 약간의 확률로 변경 될 수 있습니다. 이 후 예상 스왑 수를 계산해야합니다.
나는 비슷한 질문을 전에 게시 했지만 모든 제약 조건이 없었습니다.
나는 올바른 길을 가고 있는지 여부에 대한 좋은 힌트를 얻지 못했기 때문에 여기에 모든 제약 조건을 나열했습니다. 내가 잘못된 방식으로 문제를 생각하고 있다면 힌트를주십시오.