Compter les paires d'inversion


14

Une application classique de diviser pour mieux régner consiste à résoudre le problème suivant:

Étant donné un tableau d'éléments distincts et comparables, comptez le nombre de paires d'inversion dans le tableau: paires telles que et .a[1n](i,j)a[i]>a[j]i<j

Une approche consiste à faire un tri par fusion, mais aussi à compter le nombre de paires d'inversion dans les sous-problèmes. Au cours de l'étape de fusion, nous comptons le nombre de paires d'inversion qui s'étendent sur les (deux) sous-problèmes et ajoutons au nombre de sous-problèmes.

Bien que cela soit bon et donne un algorithme de temps , cela perturbe le tableau.O(nlogn)

Si nous avons la contrainte supplémentaire que le tableau est en lecture seule, alors nous pouvons faire une copie et traiter la copie, ou utiliser une structure de données supplémentaire comme un arbre binaire équilibré de statistiques de commande pour effectuer le comptage, qui utilisent toutes deux Espace .Θ(n)

La question actuelle est d'essayer d'améliorer l'espace, sans affecter le temps d'exécution. c'est à dire

Existe-t-il un algorithme de temps pour compter le nombre de paires d'inversion, qui fonctionne sur un tableau en lecture seule et utilise un espace sub-linéaire (c'est-à-dire )?O(nlogn)o(n)

Supposons un modèle de RAM à coût uniforme et que les éléments prennent de l' espace et la comparaison entre eux est .O(1)O(1)

Une référence fera l'affaire, mais une explication sera meilleure :-)

J'ai essayé de chercher sur le Web, mais je n'ai trouvé aucune réponse positive / négative à cela. Je suppose que c'est juste une curiosité.


3
Chan et Pătraşcu donnent un algorithme de temps , mais pour autant que je sache en parcourant le papier, ils ont besoin d'un espace Ω ( n ) . o(nlogn)Ω(n)
Raphael

2
De plus, Ajtai et al. prouver que tout algorithme de diffusion temporelle (exacte) nécessite un espace Ω ( n ) Il semble cependant qu'il y ait des approximations correspondant à vos critères. O(n)Ω(n)
Raphael

1
@Raphael: Merci! Si aucune réponse n'est à venir, votre commentaire serait la meilleure réponse jusqu'à présent.
Aryabhata

BTW Je suis un peu confus à propos de cette limite inférieure d'Ajtai et al. Le théorème 8 dit "n'importe quel algorithme", mais la limite inférieure me semble être contre les algorithmes de streaming exacts en un seul passage, un modèle très restreint
Sasho Nikolov

O(n)

Réponses:


3

Voici la réponse de Raphaël:

o(nlogn)Ω(n)O(n)Ω(n)


Merci d'avoir répondu. Je vais cependant lui donner un peu plus de temps. Le trafic semble reprendre.
Aryabhata
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.