我想知道根据时间和空间效率对一长串字符串进行排序的最佳方法。我更喜欢时间效率而不是空间效率。
字符串可以是数字,字母,字母数字等。我对排序行为不感兴趣,比如字母数字排序v / s字母排序只是排序本身。
我能想到的一些方法。
使用代码ex:.Net framework的Arrays.Sort()函数。我认为它的工作方式是计算字符串的哈希码,并使用二进制搜索将字符串插入到正确的位置。
使用数据库(例如:MS-sql)。我没有这样做。我不知道这会有多高效。
使用类似trie的前缀树数据结构。排序需要使用DFS(深度优先搜索) - O(| V | + | E |)时间遍历特里树的所有trieNodes。 (搜索需要O(l)时间,其中l是要比较的字符串的长度。)
任何其他方式或数据结构?
答案 0 :(得分:1)
您说您有一个数据库,并且可能是字符串存储在数据库中。然后你应该让数据库为你做的工作。它可能能够利用索引,因此不需要对列表进行实际排序,而只需按排序顺序从索引中读取它。
如果没有索引,数据库可能仍然可以帮助您。如果你只获取一些小常数k的前k行,例如100.当你使用带有LIMIT子句的ORDER BY时,它允许SQL Server使用一个名为TOP N SORT
的特殊优化,它在线性时间内运行,而不是O(n log(n))时间。
如果您的字符串不在数据库中,那么您应该使用.NET提供的功能。我认为你不太可能编写比默认排序快得多的自定义代码。
答案 1 :(得分:1)
我发现this paper使用trie数据结构来有效地对大量字符串进行排序。我没有仔细研究它。
答案 2 :(得分:0)
Radix sort也可能是不错的选择,例如名单
答案 3 :(得分:0)