algorithm - How to calculate "expected" number of inversions in a semi-random array of integers? -


consider array of integers. pair (i,j) called inversion in if < j , a[i] > a[j].

for every position 'i' in array there 2 possible candidates: a[i] probability p[i] , a[i]+x probability 1-p[i].

now have calculate expected number of inversions. given a[i] , p[i] every index , integer x.

i know o(n^2) approach (check every legal possible pair). also, know o(nlogn) approach calculate number of inversions in array in elements predetermined 100% probability. done modifying merge sort.

i want know approach better n squared. please let me know.

this can done simple modification standard merge-sort based algorithm counting inversions, assign weight each value , compute sum of w[i]*w[j] i<j, a[i]>a[j] (when each weight 1, normal count). instead of adding count number of elements remaining in left array, add sum of weights these elements multiplied weight of element in right array processing.

to use algorithm solve posed problem, create array of twice size, each element in original array replaced 2 elements (in sorted order), weights given probabilities.


Comments

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

php - Get uncommon values from two or more arrays -

Adding duplicate array rows in Php -