Подтвердить что ты не робот

Ожидаемое количество инверсий - от введения к алгоритмам Cormen

Пусть A [1.. n] - массив чисел n distinct. Если я < j и A [i] > A [j], то пара (i, j) называется инверсией A. (См. задачу 2-4 для большей части инверсий.) Предположим, что каждый элемент из A выбирается случайным образом независимо, и равномерно от 1 до n. Используйте случайные переменные индикатора индикатора для вычисления ожидаемого числа инверсий.


Проблема заключается в упражнении 5.2-5 во введении к алгоритмам Кормена. Вот мое рекурсивное решение:

Предположим, что x (i) - число инверсий в [1..i], а E (i) - ожидаемое значение x (i), тогда E (i + 1) можно вычислить следующим образом:
У нас есть i+1 положения, чтобы поместить все числа, если поместить я + 1 в первую позицию, тогда x (i + 1) = я + x (i); если мы поместим я + 1 во вторую позицию, то x (i + 1) = i-1 + x (i),..., поэтому E (i + 1) = 1/(i + 1) * sum ( k) + E (i), где k = [0, i]. Наконец, получим E (i + 1) = i/2 + E (i).
Поскольку мы знаем, что E (2) = 0,5, поэтому мы получаем рекурсивно: E (n) = (n-1 + n-2 +... + 2)/2 + 0,5 = n * (n-1)/4.


Хотя вывод выше, кажется, прав, но я все еще не очень уверен в этом. Поэтому я разделяю его здесь.

Если что-то не так, пожалуйста, поправьте меня.

4b9b3361

Ответ 1

Я думаю, что это правильно, но я считаю, что правильный способ доказать это - использовать условные ожидания:

для всех X и Y имеем: E [X] = E [E [X | Y]]

то в вашем случае:

E (i + 1) = E [x (i + 1)] = E [E [x (i + 1) | x (i)]] = E [SUM (k)/(1 + i) + x (i)] = i/2 + E [x (i)] = i/2 + E (i)

о втором утверждении:

if:

E (n) = n * (n-1)/4.

то E (n + 1) = (n + 1) * n/4 = (n-1) * n/4 + 2 * n/4 = (n-1) * n/4 + n/2 = E (n) + n/2

Итак, n * (n-1)/4. проверьте рекуррентное соотношение для всех n >= 2 и проверим его при n = 2

Итак, E (n) = n * (n-1)/4

Надеюсь, я понял вашу проблему, и она помогает

Ответ 2

Все решения кажутся правильными, но проблема говорит о том, что мы должны использовать индикаторные случайные величины. Итак, вот мое решение, используя то же самое:

    Let Eij be the event that i < j and A[i] > A[j].

    Let Xij = I{Eij} = {1 if (i, j) is an inversion of A

                        0 if (i, j) is not an inversion of A}

    Let X = Σ(i=1 to n)Σ(j=1 to n)(Xij) = No. of inversions of A.

    E[X] = E[Σ(i=1 to n)Σ(j=1 to n)(Xij)]

         = Σ(i=1 to n)Σ(j=1 to n)(E[Xij])

         = Σ(i=1 to n)Σ(j=1 to n)(P(Eij))

         = Σ(i=1 to n)Σ(j=i + 1 to n)(P(Eij)) (as we must have i < j)

         = Σ(i=1 to n)Σ(j=i + 1 to n)(1/2) (we can choose the two numbers in
                                            C(n, 2) ways and arrange them
                                            as required. So P(Eij) = C(n, 2) / n(n-1))

         = Σ(i=1 to n)((n - i)/2)

         = n(n - 1)/4

Ответ 3

Другое решение еще проще, IMO, хотя оно не использует "индикаторные случайные величины".

Так как все числа различны, каждая пара элементов является либо инверсией (i < j с A[i] > A[j]), либо неинверсией (i < j с A[i] < A[j]). Иными словами, каждая пара чисел находится в порядке или не в порядке.

Итак, для любой заданной перестановки общее число инверсий плюс неинверсии - это просто общее число пар или n*(n-1)/2.

По симметрии "меньше" и "больше, чем" ожидаемое число инверсий равно ожидаемому числу неинверсий.

Так как ожидание их суммы составляет n*(n-1)/2 (константа для всех перестановок), и они равны, каждая из них равна половине или n*(n-1)/4.

[Обновить 1]

По-видимому, моя "симметрия" выражения "меньше" и "больше чем" требует некоторой разработки.

Для любого массива чисел A в диапазоне от 1 до n определите ~A как массив, который вы получите, вычитая каждое число из n+1. Например, если A - [2,3,1], то ~A - [2,1,3].

Теперь заметим, что для любой пары чисел из A, находящихся в порядке, соответствующие элементы ~A не соответствуют порядку. (Легко показать, потому что отрицание двух чисел обменивает их порядок.) Это сопоставление явно показывает симметрию (двойственность) между меньшим и большим, чем в этом контексте.

Итак, для любого A число инверсий равно числу неинверсий в ~A. Но для всех возможных A соответствует ровно один ~A; когда числа выбираются равномерно, обе A и ~A одинаково вероятны. Поэтому ожидаемое число инверсий в A равно ожидаемому числу инверсий в ~A, поскольку эти ожидания вычисляются по тому же самому пространству.

Следовательно, ожидаемое число инверсий в A равно ожидаемому числу неинверсий. Сумма этих ожиданий - это ожидание суммы, которая является константой n*(n-1)/2 или общим числом пар.

[Обновить 2]

Простая симметрия: для любого массива A элементов n определите ~A как одни и те же элементы, но в обратном порядке. Свяжите элемент в позиции i в A с элементом в позиции n+1-i в ~A. (То есть, свяжите каждый элемент с самим собой в обратном массиве.)

Теперь любая инверсия в A связана с неинверсией в ~A, как и при построении в обновлении 1 выше. Таким образом, применяется тот же аргумент: число инверсий в A равно числу инверсий в ~A; оба A и ~A являются одинаково вероятными последовательностями; и др.

Точка интуиции здесь состоит в том, что операторы "меньше" и "больше" являются просто зеркальными изображениями друг друга, которые вы можете увидеть либо путем отрицания аргументов (как в обновлении 1), либо путем их замены ( как в обновлении 2). Таким образом, ожидаемое количество инверсий и неинверсий одинаково, поскольку вы не можете определить, просматриваете ли вы какой-либо конкретный массив через зеркало или нет.

Ответ 4

Еще проще (аналогично Аману выше, но, возможно, более ясному)...

Let Xij be a random variable with Xij=1 if A[i] > A[j] and Xij=0 otherwise.
Let X=sum(Xij) over i, j where i < j

Number of pairs (ij)*:               n(n-1)/2
Probability that Xij=1 (Pr(Xij=1))): 1/2
By linearity of expectation**:       E(X) = E(sum(Xij))
                                          = sum(E(Xij))
                                          = sum(Pr(Xij=1))
                                          = n(n-1)/2 * 1/2
                                          = n(n-1)/4

*  I think of this as the size of the upper triangle of a square matrix.
** All sums here are over i, j, where i < j.

Ответ 5

Использование индикаторных случайных величин:

  • Пусть X = случайная величина, равная числу инверсий.
  • Пусть Xij = 1, если A [i] и A [j] образуют инверсионную пару, а Xij = 0 в противном случае.
  • Число пар инверсии = Сумма за 1 <= я < j <= n of (Xij)
  • Теперь P [Xij = 1] = P [A [i] > A [j]] = (n выбрать 2)/(2! * n выбрать 2) = 1/2
  • E [X] = E [суммирование по всем ij-парам таким образом, что я < j of Xij] = сумма по всем парам ij, такая, что я < j из E [Xij] = n (n - 1)/4