C: Tri Méthodes d'analyse

voix
7

J'ai beaucoup de différents algorithmes de tri qui ont tous la signature suivante:

void <METHOD>_sort_ints(int * array, const unsigned int ARRAY_LENGTH);

Y a-t-il des suites de tests pour le tri que je pouvais utiliser dans le but de faire des comparaisons empiriques?

Créé 27/08/2009 à 04:52
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
10

Cette discussion détaillée , ainsi que des liens vers un grand nombre de pages Web connexes que vous êtes susceptible de trouver utile, décrit également un ensemble utile de données d'entrée pour tester les algorithmes de tri (voir la page liée pour des raisons). résumant:

  1. Complètement série au hasard remaniés
  2. Déjà tableau trié
  3. Déjà triés dans le tableau de l'ordre inverse
  4. tableau Chainsaw
  5. Réseau d'éléments identiques
  6. Déjà tableau trié avec des permutations de N (avec N de 0,1 à 10% de la taille)
  7. tableau déjà trié dans l'ordre inverse de la matrice de permutations de N
  8. Les données qui ont une distribution normale avec des clés en double (ou fermer) (pour le tri stable seulement)
  9. données pseudo-aléatoires (valeurs quotidiennes de S & P500 ou tout autre indice pour une dizaine d'années peut-être un bon test mis ici, ils sont disponibles à partir Yahoo.com)
Créé 02/09/2009 à 11:10
source utilisateur

voix
7

L'étude définitive de tri est Bob Sedgewick thèse de doctorat de. Mais il y a beaucoup de bonnes informations dans ses manuels d'algorithmes, et ce sont les deux premières places , je chercherais suite de tests et de la méthodologie. Si vous avez eu un cours récent , vous saurez plus que moi; dernière fois que j'avais un cours, la meilleure méthode est d'utiliser quicksort jusqu'à 12 partitions de taille, puis exécutez le tri par insertion sur l'ensemble du réseau. Mais les réponses changent aussi rapidement que le matériel.

Programmation des livres Perls de Jon Bentley ont d'autres informations sur le tri.

Vous pouvez rapidement concocter une suite de tests contenant

  • entiers aléatoires

  • entiers triés

  • Inverse entiers classés

  • entiers triés, légèrement perturbé

Si ma mémoire est bonne, ce sont les cas les plus importants pour un algorithme de tri.

Si vous cherchez à trier des tableaux qui ne rentrent pas dans le cache, vous aurez besoin de mesurer les effets du cache. valgrindest efficace si lent.

Créé 27/08/2009 à 05:22
source utilisateur

voix
3

sortperf.py dispose d' une suite bien choisi des cas de test de référence et a été utilisé pour soutenir l'essai trouvé ici et faire timsort le genre en Python lo qu'il ya plusieurs années. Notez que, enfin, Java peut se déplacer à timsort aussi, grâce à Josh Block (voir ici ), donc je suppose qu'ils ont écrit leur propre version des cas de test de référence - cependant, je ne peux pas trouver facilement une référence à elle. (timsort, une écurie, d' adaptation, variante de mergesort naturelle itérative, est particulièrement adapté aux langues avec la sémantique référence à objet comme Python et Java, où « mouvement de données » est relativement pas cher [[puisque tout ce qui est jamais être déplacé est des références aka pointeurs , non blobs de taille ;-) unbounded]], mais les comparaisons peuvent être relativement coûteuses `car il n'y a pas de limite supérieure à la complexité d'une fonction de comparaison - mais cela est valable pour toutes les langues où le tri peut être personnalisé par une comparaison personnalisée ou function` clé d'extraction).

Créé 06/09/2009 à 02:15
source utilisateur

voix
3

Ce site présente les différents algorithmes de tri en utilisant quatre groupes: http://www.sorting-algorithms.com/

En plus des quatre groupes dans la réponse de Norman vous voulez vérifier les algorithmes de tri avec collection de nombres qui ont quelques similitudes dans les chiffres:

  • Tous les entiers sont uniques
  • Le même nombre entier dans l'ensemble de la collection
  • Quelques clés uniques

Modification du nombre d'éléments de la collection est également une bonne pratique de vérifier chaque algorithme avec 1K, 1M, 1G etc. pour voir quelles sont les implications de la mémoire de cet algorithme.

Créé 02/09/2009 à 10:51
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more