Je recherche un algorithme à un passage qui calcule la parité d'une permutation. Je suppose qu'une permutation d'entrée est donnée par le flux . La sortie doit être la parité de la permutation. La question qui m'intéresse est la quantité de mémoire qu'un algorithme déterministe devrait utiliser. Existe-t-il un algorithme aléatoire pour le problème?
Je sais que le calcul du nombre d'inversions en un seul passage utilise la mémoire . La limite supérieure peut être facilement obtenue avec n'importe quel BST. La limite inférieure est présentée ici: http://citeseerx.ist.psu.edu/viewdoc/versions?doi=10.1.1.112.5622
Hélas, la preuve de la borne inférieure dans le papier ne peut pas être étendue au cas de parité (ou ce n'est pas si évident pour moi).
Je sais aussi que le calcul de la parité dans un petit espace avec un accès aléatoire à une permutation peut se faire en temps et en mémoire par un algorithme déterministe ou en temps et mémoire par randomisé. Voir http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.2256
L'idée principale est que la parité d'une permutation peut être calculée par la formule , où c est le nombre de cycles et n est la taille. Les auteurs font la décomposition en cycle d'une permutation. On peut donc facilement calculer le nombre de cycles.
Quelqu'un connaît-il un algorithme efficace ou une limite inférieure sur la mémoire pour calculer la parité dans le modèle de streaming? Les algorithmes randomisés mieux que la pièce aléatoire m'intéressent aussi.