web-dev-qa-db-fra.com

Quelle est la différence entre le tri par seau et le tri radix?

Le tri par seau et le tri par radix sont des cousins ​​proches; le tri par compartiment va du MSD au LSD, tandis que le tri radix peut aller dans les deux "directions" (LSD ou MSD). Comment fonctionnent les deux algorithmes, et en particulier en quoi diffèrent-ils?

44
Lazarus

La passe initiale de RadixSort et BucketSort est exactement la même. Les éléments sont placés dans buckets (ou bins) de plages incrémentales (par exemple 0-10, 11-20, ... 90-100), en fonction du nombre de chiffres dans le plus grand nombre.

Dans l'étape suivante, cependant, BucketSort ordonne ces "compartiments" et les ajoute dans un tableau. Cependant, RadixSort ajoute les compartiments sans autre tri et les "re-buckets" en fonction du deuxième chiffre (dix) des nombres. Par conséquent, BucketSort est plus efficace pour les tableaux "denses", tandis que RadixSort peut bien gérer les tableaux clairsemés (enfin, pas exactement clairsemés, mais espacés).

41
Akash

Le tri par seau et le tri par radix sont comme des algorithmes de tri sœur car ce ne sont pas des tris de comparaison et l'idée générale est similaire. En outre, ils sont tous deux un peu abstraits dans la mise en œuvre.

Tri Radix:

  • Radix signifie base (binaire, octal, décimal, etc.). Par conséquent, ce tri concerne les nombres (également utilisé pour les chaînes). Cela fonctionne lorsque chaque élément E est comme ek... e2e1e, où eje est dans une certaine gamme. (généralement 0 à une base comme 0-9 en décimal ou 0-255 en ASCII caractères)

  • Il utilise ensuite k passes d'un algorithme de sous-tri stable (It doit être stable ou bien le tri Radix ne fonctionnera pas) pour trier les nombres. Cet algorithme de sous-tri est généralement aussi le tri par comptage ou le tri par seau mais il ne peut pas être le tri Radix lui-même.

  • Vous pouvez commencer à partir du chiffre le plus significatif ou du chiffre le moins significatif parce que il mélange chaque numéro à chaque passage (de k à 0 ou de 0 à k)

  • Il s'agit d'un algorithme de tri stable.

Tri par seau:

  • Il sépare le tableau en petits groupes ou compartiments et les trie individuellement en utilisant un algorithme de sous-tri ou un appel récursif à lui-même, puis combine le résultat. Par exemple, trier les joueurs en ajoutant des seaux de leur équipe, puis les trier par leur numéro de maillot ou quelque chose comme des numéros de tri allant de 1-30 à 3 seaux de 1-10, 11-20, 21-30.

  • l'étape de combinaison est triviale (contrairement au tri par fusion). il suffit de copier les éléments de chaque compartiment dans le tableau d'origine ou de joindre la tête de chaque compartiment avec la queue du compartiment précédent (dans le cas de listes liées)

  • Radix/base pourrait être n type/instance du groupe/compartiment lors du tri des nombres. Par conséquent, vous pouvez considérer MSD Radix comme une instance modifiée du tri par compartiment

  • Le tri par compartiment est pas en place mais stable algorithme de tri. Cependant, certaines variantes du tri par compartiment peuvent ne pas être stables (si vous utilisez un algorithme de sous-tri qui n'est pas stable)

20
dev_ankit