Dada uma matriz de números inteiros, cada elemento da matriz pode ser aumentado por um número fixo com alguma probabilidade , . Eu tenho que encontrar o número esperado de swaps que ocorrerão para classificar a matriz usando a classificação por bolhas .N b p [ i ] 0 ≤ i < n
Eu tentei o seguinte:
A probabilidade de um elemento para pode ser calculada facilmente a partir das probabilidades fornecidas.i < j
Usando o exposto, calculei o 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.
Basicamente, cheguei a essa idéia porque o número esperado de swaps pode ser calculado pelo número de inversões da matriz. Então, usando a probabilidade dada, estou calculando se um número será trocado por um número .A [ j ]
Observe que os elementos iniciais da matriz podem estar em qualquer ordem, classificados ou não. Então cada número pode mudar com alguma probabilidade. Depois disso, tenho que calcular o número esperado de swaps.
Eu postei uma pergunta semelhante antes, mas ela não tinha todas as restrições.
Não recebi boas dicas sobre se estou no caminho certo ou não, então listei todas as restrições aqui. Por favor, dê-me algumas dicas se estiver pensando no problema de maneira incorreta.
fonte
Respostas:
Vamos ser definido da seguinte maneira:BubbleSort
Dada alguma permutação , é dito que ocorreu uma inversão se para algunsVemos que executa uma verificação de inversão para cada par e, nesse caso, realiza uma troca. Seja o número de swaps. Não é difícil ver, no pior dos casos, possíveis trocas. Mas estamos interessados no caso esperado, que podemos calcular definindo em termos de inversões em .x j < x i i < j . B u b b G e S o r t Xx1,⋯,xn xj<xi i<j. BubbleSort X X=(n2) X BubbleSort
Agora deixe onde é a variável indicadora de que existe uma inversão para algum par . A expectativa é definida como . Agora precisamos determinar .X=∑j∑i<jIij Iij (i,j) E[X]=E[∑j∑i<jIij]=∑j∑i<jE[Iij] P{Iij}
Ao assumir qualquer permutação possível como entrada, cada uma com probabilidade uniforme, pode ser demonstrado que . O raciocínio por trás disso é que, sob qualquer permutação possível, metade do tempo e metade do tempo para .P{Iij}=12 xj<xi xi<xj i≠j
Voltando ao nosso cálculo de expectativa, vemos queE[X]=∑j∑i<jE[Iij]=∑j∑i<j12=(n2)⋅12=n(n−1)4
fonte