Trier un tableau de

8

J'essaie de comprendre comment trier un tableau de n éléments quand seulement Journaln ne sont pas en place.

J'ai entendu dire que trier un tableau avec au plus je les inversions ont de la complexité O(nJournal(je/n)). Parce qu'il y aJournaln éléments qui ne sont pas triés, dans mon cas il y a au plus nJournaln inversion.

La réponse à la question est O(nJournalJournaln) ce qui est cohérent avec la formule, mais je ne comprends pas "l'idée derrière elle, ni quel algorithme de tri y parvient.

user64264
la source

Réponses:

9

En admettant que "k éléments hors de propos "signifie qu'il existe k les éléments dont la suppression laisse le reste du tableau trié, il y a un O(n+kJournalk)-algorithme de temps pour trier le tableau entier.

En un mot, calculer une sous-séquence croissante de longueur au moins n-2k, triez les autres et fusionnez. Le premier peut être accompli à tempsO(n)par un simple algorithme de pile qui pousse les éléments un par un et fait apparaître les deux premiers lorsqu'ils sont en panne. La stratégie de suppression optimale doit supprimer au moins un de ces éléments, de sorte que le dommage total est limité par2k suppressions.

David Eisenstat
la source
+1 pour l'idée soignée. Juste une chose (et je divise probablement les cheveux ici), pouvez-vous vraiment faire des insertions dans des endroits arbitraires en évitantO(n)"tout le monde passe à droite s'il vous plaît" coût? Je crois que nous devrions garder une trace des insertions dans une structure distincte, en faisant un dernier passage à la fin pour produire le tableau trié.
quicksort
@quicksort mieux pour simplement trier les notes et fusionner les méthinks
David Eisenstat
1
C'est la même chose, mais la fusion est plus propre, je suis d'accord.
quicksort
1
Il convient de mentionner que cela est asymptotiquement optimal (en utilisant des comparaisons) en fonction à la fois de n et de k.
aelguindy
Eh bien, l'algorithme que vous avez décrit semble être un tri par fusion .
Morwenn
5

Disons qu'il y a k éléments non en place.

Divisez le tableau en sous-réseaux non décroissants. Cela peut être fait enΘ(n) temps et se traduira par au plus 2ksous-réseaux. Maintenant, nous les fusionnons simplement par pairesΘ(nJournalk) temps, ce qui donne un tableau trié.

tri rapide
la source