Número esperado de swaps en ordenamiento de burbujas


14

Dada una matriz de enteros, cada elemento en la matriz se puede aumentar en un número fijo con alguna probabilidad , . Tengo que encontrar la cantidad esperada de intercambios que se realizarán para ordenar la matriz usando el ordenamiento de burbujas .N b p [ i ] 0 i < nUNnortesipag[yo]0 0yo<norte

He intentado lo siguiente:

  1. La probabilidad de un elemento para se puede calcular fácilmente a partir de las probabilidades dadas.i < jUN[yo]>UN[j]yo<j

  2. Usando lo anterior, he calculado el número esperado de swaps como:

    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.
    

Básicamente llegué a esta idea porque el número esperado de intercambios se puede calcular por el número de inversiones de la matriz. Entonces, haciendo uso de la probabilidad dada, estoy calculando si un número se intercambiará con un número .A [ j ]UN[yo]UN[j]

Tenga en cuenta que los elementos de la matriz inicial pueden estar en cualquier orden, ordenados o sin clasificar. Entonces cada número puede cambiar con cierta probabilidad. Después de esto, tengo que calcular el número esperado de intercambios.

He publicado una pregunta similar antes, pero no tenía todas las restricciones.

No obtuve ninguna pista sobre si estoy en el camino correcto o no, así que enumeré todas las restricciones aquí. Por favor, dame algunas pistas si estoy pensando en el problema de manera incorrecta.


66
Lindo tpyo en el título, sin embargo.
JeffE

No quiere decir, dé una matriz ordenada de N enteros, cada elemento ... También parece faltar el rango de los números en la matriz inicial y las diferencias entre ellos.
Danny Varod

Tenga en cuenta que para este tipo de análisis, debe dejar muy en claro qué "implementación" en particular si considera la idea de Bubblesort. Sería mejor si le diera el algoritmo en pseudocódigo.
Raphael

Este problema es de un concurso en curso en el sitio codechef codechef.com/JULY12/problems/LEBOBBLE Estaré encantado de publicar mi enfoque después del concurso.
rizwanhudda

Respuestas:


11

Deje que ser definido como la siguiente:situsisilmiSort

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)

Dada alguna permutación , se dice que se ha producido una inversión si x j < x i para alguna i < j . Vemos que B u b b l e S o r t realiza una verificación de inversión para cada par, y si es así, realiza un intercambio. Deje X ser el número de intercambios. No es difícil ver que en el peor de los casos hayx1,,xnortexj<Xyoi<j.BubbleSortX XBubbleSortX=(n2)posibles intercambios realizados. Pero estamos interesados ​​en el caso esperado, que podemos calcular definiendo en términos de inversiones en .XBubbleSort

Ahora dejemos que donde es la variable indicadora de que existe una inversión para algún par . La expectativa se define como . Ahora necesitamos determinar . I i j ( i , j ) E [ X ] = E [ j i < j I i j ] = j i < j E [ I i j ] P { I i j }X=jyo<jyoyojyoyoj(yo,j)mi[X]=mi[jyo<jyoyoj]=jyo<jmi[yoyoj]PAG{yoyoj}

Al asumir cualquier permutación posible como entrada, cada una con probabilidad uniforme, se puede demostrar que . El razonamiento detrás de esto es que bajo cualquier permutación posible, la mitad del tiempo y la mitad del tiempo para .PAG{yoyoj}=12Xj<XyoXyo<Xjyoj

Volviendo a nuestro cálculo de expectativas, vemos quemi[X]=jyo<jmi[yoyoj]=jyo<j12=(norte2)12=norte(norte-1)4 4

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.