Sur le site Web des algorithmes de tri , la réclamation suivante est faite:
L'algorithme de tri idéal aurait les propriétés suivantes:
- Stable: les clés égales ne sont pas réorganisées.
- Fonctionne en place, nécessitant d'espace supplémentaire.
- Comparaisons clés pire des cas .
- Swaps pire des cas .
- Adaptatif: accélère jusqu'à lorsque les données sont presque triées ou lorsqu'il y a peu de clés uniques.
Aucun algorithme ne possède toutes ces propriétés et le choix de l'algorithme de tri dépend donc de l'application.
Ma question est, est-il vrai que
il n'y a pas d'algorithme [de tri] qui possède toutes ces propriétés
et si oui, pourquoi? Qu'est-ce qui rend ces propriétés impossibles à réaliser simultanément?
algorithms
sorting
James Faulcon
la source
la source
Réponses:
WikiSort et GrailSort sont deux algorithmes assez récents qui font des comparaisons clés en place, stables et dans le pire des cas . Malheureusement, je ne les comprends pas assez bien pour savoir s'ils approchent les swaps O ( n ) ou sont adaptatifs, donc je ne sais pas s'ils violent les quatrième et cinquième conditions que vous avez.O ( n l g ( n ) ) O ( n )
En examinant l'article "Fusion basée sur un ratio stable sur place", de Pok-Son Kim et Arne Kutzner lié à la page WikiSort GitHub, Kim et Kutzner prétendent avoir une opération de fusion qui est (WikiSort est une variante de Mergesort) mais je ne sais pas si cela se traduit par WikiSort ayant des échangesO(n). GrailSort est censé être plus rapide (dans la page WikiSort GitHub), donc je pourrais imaginer qu'il est probable qu'ils aient tous les deux lesswapsO(n) lesplus défavorableset qu'ils soient adaptatifs.O ( m ( nm+ 1 ) ) O ( n ) O ( n )
Si quelqu'un parvient à comprendre WikiSort et / ou GrailSort, j'apprécierais qu'ils répondent également à ma question ouverte à ce sujet
la source
Le smoothsort de Dijkstra se rapproche, mais n'est pas stable.
la source
Aucun algorithme connu ne satisfait toutes ces propriétés. Ces propriétés sont devenues recherchées alors que nous développions davantage d'algorithmes de tri. Par exemple, le tri à bulles (sans doute l'algorithme de tri le plus primitif), était probablement non stable dans la première implémentation, mais a été conçu pour être stable car les informaticiens ont cherché à le rendre plus efficace dans les implémentations ultérieures. Ainsi, les informaticiens ont très probablement choisi les meilleurs traits parmi les meilleurs algorithmes, et en conséquence, vous avez dressé une liste de tous ces traits souhaitables. En réalité, il est difficile d'avoir le meilleur de tous les mondes. Pas impossible, mais peut-être impossible avec nos architectures actuelles.
la source
(Même si c'est une vieille question, je suis tombée dessus et d'autres pourraient le faire aussi.)
Il existe en effet un algorithme qui satisfait (1) - (4) et la seconde moitié de (5), est donc très proche de l'exigence ci-dessus. Il est décrit dans [1] et combine plusieurs astuces inventées au cours des dernières décennies.
[1]: Franceschini, G. Theory Comput Syst (2007) 40: 327. https://doi.org/10.1007/s00224-006-1311-1
la source