À ma connaissance, il n'existe pas d' algorithme pire des cas qui résout le problème suivant:
Étant donné une séquence de longueur composée d'entiers finis, trouvez la permutation où chaque élément est inférieur ou égal à son successeur.
Mais existe-t-il une preuve de son inexistence dans le modèle transdichotomique de calcul ?
Notez que je ne limite pas la plage des entiers. Je ne limite pas non plus les solutions aux types de comparaison.
Réponses:
Les entiers peuvent être triés de manière stable en temps avec espace supplémentaire. O ( 1 )O ( n ) O ( 1 ) n [ 1 , n c ]Plus précisément, si vous avez entiers dans l'intervalle , le peut être trié en temps O (n).n [ 1 , nc]
Cela n'a été montré il y a que deux ans par une équipe comprenant feu Mihai Pătrașcu (ce qui ne devrait surprendre personne qui connaît son travail). C'est un résultat remarquable que je suis surpris que plus de gens ne connaissent pas, car cela signifie que le problème du tri des entiers est (théoriquement) résolu.
Il existe un algorithme pratique (donné dans le document ci-dessus) si vous êtes autorisé à modifier les clés. Fondamentalement, vous pouvez compresser les entiers triés plus que vous ne pouvez compresser les entiers non triés, et l'espace supplémentaire que vous gagnez est exactement égal à la mémoire supplémentaire nécessaire pour effectuer le tri radix. Ils fournissent également un algorithme peu pratique qui prend en charge les clés en lecture seule.
la source
S'il n'y a pas de limite supérieure sur la taille de vos entiers, alors je ne crois pas qu'il existe un algorithme de tri en temps linéaire connu.
la source