2011-01-09 6 views
10

Le tri radix est-il capable de trier les données flottantes, par exemple 0,5, 0,9, 1,02, etc.?Tri radié, tri des données flottantes

+0

Je voudrais implémenter le tri de base en réduisant ses compartiments en 0 et 1 seulement signifiant que je convertirais chaque entrée en sa valeur binaire et ensuite procéder au tri de base, serait-ce une option pour accélérer son tri ou cela ferait radix trier un peu plus lent qu'avant. Merci. – BGV

Répondre

1

Pas prêt à l'emploi, mais vous avez quelques options. Vous pouvez discrétiser les données, par exemple en multipliant par 100 et en arrondissant (de sorte que vous auriez, pour votre exemple ci-dessus, 5, 9 et 102). Vous pouvez également classer les données par lots (regrouper les numéros par plage, comme dans 0 < x < = 1, 1 < x < = 2), puis trier dans chaque compartiment.

24

Oui, c'est possible. Il nécessite un passage supplémentaire pour gérer correctement les valeurs négatives. Les articles par Pierre Terdiman et Michael Herf discutent en détail comment l'implémenter. En bref, vous convertissez le flottant en nombre entier non signé, les triez, puis les convertissez en flottant (ceci est requis, sinon les valeurs négatives seraient incorrectement triées après les positives).

Leur méthode présente l'avantage de ne pas introduire d'erreur dans vos données (à condition que votre processeur stocke le flotteur conformément à la norme IEEE 754).

+0

+1 pour les grands articles. –

+1

Voici un autre article intéressant (http://seven-degrees-of-freedom.blogspot.com/2010/07/question-of-sorts.html) comparant le tri radix à une version parallélisée SPU du tri par fusion. En résumé le tri de fusion tout en étant plus complexe (la complexité est O (n log n) contre le O (n) de tri de base), peut être plus facilement parallélisé et gagner à la fin. –