Buscar

Considerando o recurso de inversão apresentado, descreva como um algoritmo de complexidade O(nlog(n)), tanto no melhor como no pior casos, pode ser projetado para contar o número de inversões existent

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Powered by AI
Bing
Claro, Ângelo! Aqui está uma versão reescrita do texto como se fosse você elaborando a resposta:
Prezado professor,
Com base no estudo dos materiais da terceira unidade e na tarefa proposta, gostaria de apresentar minha
abordagem para o cálculo do número de inversões em um vetor de números reais. Optei por utilizar o
algoritmo Merge Sort, que é eficiente e possui complexidade O(nlog(n)) tanto para os melhores quanto para os
piores casos.
O Merge Sort divide o vetor em duas partes, ordena cada uma delas e, em seguida, as combina novamente,
resultando em um vetor ordenado. Durante a etapa de combinação, é possível contar as inversões.
Segue o pseudocódigo do algoritmo que desenvolvi:
MergeSort(A, p, r)
1. Se p < r
2. q = (p + r) / 2
3. MergeSort(A, p, q)
4. MergeSort(A, q + 1, r)
5. Merge(A, p, q, r)
Merge(A, p, q, r)
1. n1 = q - p + 1
2. n2 = r - q
3. Crie arrays L[1 ... n1 + 1] e R[1 ... n2 + 1]
4. Copie A[p ... q] para L[1 ... n1] e A[q+1 ... r] para R[1 ... n2]
5. L[n1 + 1] = ∞ e R[n2 + 1] = ∞
6. i = 1 e j = 1
7. para k = p até r
8. se L[i] ≤ R[j]
9. A[k] = L[i]
10. i = i + 1
11. senão
12. A[k] = R[j]
13. j = j + 1
14. inversões = inversões + (n1 - i + 1)
ContarInversoes(A, p, r)
1. inversões = 0
2. Se p < r
3. q = (p + r) / 2
4. ContarInversoes(A, p, q)
5. ContarInversoes(A, q + 1, r)
6. inversões += Merge(A, p, q, r)
7. return inversões
No método Merge, incluí uma modificação para contabilizar as inversões. Quando um elemento do subvetor
direito (R[j]) é copiado para o vetor A, isso indica que todos os elementos restantes no subvetor esquerdo (L[i
… n1]) são maiores que R[j] e, portanto, cada um deles forma uma inversão com R[j]. Assim, o contador de
inversões é incrementado pelo número de elementos remanescentes no subvetor esquerdo.
Espero que esta solução atenda às expectativas da atividade e estou aberto a discussões e sugestões para
aprimorá-la.
Atenciosamente, Ângelo
Espero que esta versão esteja alinhada com o que você desejava expressar. Se precisar de mais alguma ajuda,
estou à disposição!

Mais conteúdos dessa disciplina