按所有元素对元组数组进行排序

时间:2013-03-18 17:15:34

标签: algorithm sorting data-structures binary-search-tree trie

我想按所有元素对元组进行排序(比如它们是否在trie中)。如果输入为(1,2,5),(1,2,3),(1,1,4),(2,8,9),则相应的输出为(1,1,4),( 1,2,3),(1,2,5),(2,8,9)。相应的trie将是:

    root
   /   \
  1     2
 / \    | 
1   2   8
|  /\   |
4 3  5  9

我在考虑为元组中的每个位置使用搜索树。还有一种显而易见的天真方式(按第一个位置排序,然后按第二个位置排序等)。有没有人看到更好的方法?

3 个答案:

答案 0 :(得分:3)

您在上面概述的基于trie的方法与在元组上进行最重要的数字基数排序非常相似。您基本上是根据它们的第一个数字将它们分配到存储桶中,然后根据剩余的数字递归地将存储桶细分为更小的组。您可能需要考虑显式执行MSD基数排序而不是构建trie,因为当数据稀疏时,尝试可能是内存效率低的,而MSD基数排序具有相当好的内存使用(特别是如果您隐式实现所有内容)。

在上面给出的示例中,元组中的所有数字都是单个数字。如果是这种情况,您最多可以有10×10×10 = 1000个不同的元组,这不是很大。在这种情况下,您可能需要考虑使用带有自定义比较器的标准排序算法,因为更优化排序的好处可能不会那么明显。另一方面,如果你的元组中有更多条目,那么可能值得投资一个更聪明的类型,比如MSD基数排序。

希望这有帮助!

答案 1 :(得分:1)

Radix Sort to Trie,就像Merge Sort to Binary-Tree

答案 2 :(得分:0)

如何保持简单,并将元组值视为元组的所有元素与某个基数的总和 说10 那么我们有(1,2,5)为125 所以现在只需使用任何简单的比较排序(如堆排序)对它们进行排序