Non, cela dépend de votre application. Les mesures de tri sont souvent appelées mesures de désordre , fonctions de à , où est la collection de toutes les séquences finies d'entiers non négatifs distincts. L’enquête d’Estivill-Castro et Wood [1] recense et analyse 11 mesures différentes du désordre dans le contexte des algorithmes de tri adaptatif.N<NRN<N
Le nombre d'inversions peut fonctionner dans certains cas, mais est parfois insuffisant. Un exemple donné dans [1] est la séquence
⟨⌊n/2⌋+1,⌊n/2⌋+2,…,n,1,…,⌊n/2⌋⟩
qui a un nombre quadratique d'inversions, mais seulement constitué de deux courses ascendantes. Il est presque trié, mais ceci n'est pas capturé par des inversions.
[1] Estivill-Castro, Vladmir et Derick Wood. "Une enquête sur les algorithmes de tri adaptatif." ACM Computing Surveys (CSUR) 24.4 (1992): 441-476.
Mannila [1] axiomatise le pré-tri (en mettant l’accent sur des algorithmes de comparaison) comme suit (paraphrasant).
Des exemples de telles mesures sont les
Notez que des distributions aléatoires utilisant ces mesures ont été définies, c'est-à-dire telles que des séquences plus / moins triées sont plus ou moins probables. Celles-ci sont appelées distributions de type Ewens [2, Ch. 4-5; 3, exemple 12; 4], dont un cas particulier est la distribution dite de Mallows . Les poids sont paramétriques dans une constante et remplissentθ>0
Notez comment définit la distribution uniforme (pour tout ).θ=1 m
Puisqu'il est possible d'échantillonner efficacement les permutations de ces mesures, ce travail peut être utile en pratique lors de l'analyse comparative des algorithmes de tri.
la source
J'ai ma propre définition du "tri" d'une séquence.
Quelle que soit la séquence [a, b, c,…], nous la comparons à la séquence triée contenant les mêmes éléments, comptons le nombre de correspondances et la divisons par le nombre d'éléments de la séquence.
Par exemple, séquence donnée,
[5,1,2,3,4]
nous procédons comme suit:1) trier la séquence:
[1,2,3,4,5]
2) comparez la séquence triée avec l'original en la déplaçant d'une position à la fois et en comptant le nombre maximal de correspondances:
3) Le nombre maximal de correspondances est 4, nous pouvons calculer le "sort" comme 4/5 = 0.8.
Le tri d'une séquence triée serait 1 et le tri d'une séquence avec des éléments placés dans l'ordre inverse serait 1 / n.
L'idée sous-jacente à cette définition est d'estimer la quantité minimale de travail nécessaire pour convertir une séquence en une séquence triée. Dans l'exemple ci-dessus, nous ne devons déplacer qu'un élément, le 5 (il y a plusieurs façons, mais le déplacement de 5 est le plus efficace). Lorsque les éléments seraient placés dans l'ordre inverse, nous aurions besoin de déplacer 4 éléments. Et lorsque la séquence a été triée, aucun travail n'est nécessaire.
J'espère que ma définition a du sens.
la source
Si vous avez besoin de quelque chose de rapide et de sale (les signes de sommation me font peur), j'ai écrit une fonction de désordre super facile en C ++ pour une classe appelée Array qui génère des tableaux int contenant des nombres générés aléatoirement:
Function compare simplement la valeur de chaque élément à l'index de l'élément + 1, de sorte qu'un tableau inversé a une valeur de désordre de 1 et qu'un tableau trié possède une valeur de désordre de 0. Pas sophistiqué, mais fonctionnel.
Michael
la source