string - 字典排序 O(m)

标签 string algorithm sorting tree lexicographic

假设我们有 n 个字符串(英文为 26)。字符串的长度为 l1、l2、l3、... ln >= 1。令 m = sum(l1,l2,l3,...,ln)。如何在时间 O(m) 内以图形方式对字符串进行词典排序?

关于算法的思考:

选项 1: 创建一个 BST,我们通过比较字母来插入单词,然后让最左边的字母按字母顺序排列在第一个,最右边的字母按字母顺序/字典顺序排列在最后一个。

选项 2: 基数排序,我们有 'A' 到 'Z' 的桶......我认为如果 MSB 基数排序也就是从第一个字母开始然后填充每个字符串直到最长的字母可能不是 O(longest string length) 。 ..

选项 3: 我认为 Tries 是一回事,但不确定它们的时间复杂度是否适用于此?

要被标记为最佳,请选择以上 3 个中的一个并解释为什么它有效而其他无效 ~ 或包括一个好的算法的链接或提供答案~ 你将如何设计在这个时间限制下工作的算法?

最佳答案

最简单的方法是进行最重要字符优先基数排序。

当某些字符串变得太短而无法包含您要排序的数字时,您将它们移到当前区域的前面并忘记它们,因此它们将位于所有以它们为前缀的较长字符串之前。

每个字符串的每个字符被认为是 O(1) 次,这导致总共 O(sum(lengths))(假定每个长度 >=1)

关于string - 字典排序 O(m),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102867/

相关文章:

php - 将字符串转换为可执行表达式 PHP?

python - 根据预定义的字符类型拆分字符串

c++ - std::string::erase() 删除使用 std::string::find() 找到的第一个字符后的所有内容

c - 这个简单的 C 代码中发生了什么?

mysql - 按分组选择中的字段数对 SQL 查询进行排序

arrays - 使用 reserveCapacity 向后快速填充数组

algorithm - 如何加速 geopandas 空间连接?

c++ - std::includes in c++ 算法的复杂性

c# - 按两个变量对列表进行排序

对逗号分隔数字列表进行排序的 Pythonic 方法