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.