Algorithm 排序n个大小为n的字符串?

Algorithm 排序n个大小为n的字符串?,algorithm,sorting,radix-sort,Algorithm,Sorting,Radix Sort,我想对^2上长度为n的n个字符串进行排序?除了基于基数的排序或基于trie的排序之外,还有其他解决方案吗?假设您尝试使用基于比较的排序。比较两个长度为n的字符串在最坏的情况下需要时间。因此,在最坏的情况下,您只需进行比较即可对字符串进行排序。然而,这是不可能的,因为基于比较的排序算法平均需要Ωn logn比较。这种最坏情况是可以实现的;从数组x1,x2,…,xn开始,可以形成字符串an-1x1,an-1x2,…,an-1xn,并且每个比较都需要时间 这就排除了比较排序,这就留下了利用字符串实际属

我想对^2上长度为n的n个字符串进行排序?除了基于基数的排序或基于trie的排序之外,还有其他解决方案吗?

假设您尝试使用基于比较的排序。比较两个长度为n的字符串在最坏的情况下需要时间。因此,在最坏的情况下,您只需进行比较即可对字符串进行排序。然而,这是不可能的,因为基于比较的排序算法平均需要Ωn logn比较。这种最坏情况是可以实现的;从数组x1,x2,…,xn开始,可以形成字符串an-1x1,an-1x2,…,an-1xn,并且每个比较都需要时间

这就排除了比较排序,这就留下了利用字符串实际属性的方法。您列出的方法-基于trie的方法和基数排序-构成了大多数算法的基础。事实上,据我所知,所有字符串排序算法都是这些主题的变体。这些算法有很好的优化实现。例如,是一种优化的基数排序,它设计为缓存友好型,因此比naive算法具有更好的性能


您需要记住的一个细节是,从中绘制字符串的字母表的大小确实会影响运行时。长度为n的字符串的基数排序更合适地在2+n |∑|上花费时间,其中|∑|是可以生成字符串的不同字符数。因此,如果字母表中的字符数超过n个,则不必使用基数排序在2上对长度为n的n个字符串进行排序。

为什么trie或基数排序不适合您的问题?不太可能有比这更简单的了。因为没有固定数量的字母表来构造字符串。也许你可以再解释一下。您拥有的任何东西都可以表示为n个符号的组,并且不同组中相同位置的符号可以相互比较。你在寻找一个就地算法吗?快速排序?如果您没有“有限”或足够低的字母计数,则无法通过标准编程方式在^2上解决此问题。您最多只能使用^2*logn。当标准方法还不够时,通常会使用神经网络,但通过神经网络方法创建正确的排序可能会很糟糕。您还想要最佳的复杂性或运行时间吗?因为它们是非常不同的东西。。。为此,您应该添加目标平台、资源和数据规范,如使用的n范围、字母表和字符串数据集的统计属性。。。