字典排序O(m)

问题描述 投票:0回答:1

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

Thoughts on algos:

选项1:创建一个BST,我们通过比较它们的字母来插入单词,然后最左边是第一个字母,最右边是字母/词典中的最后一个。

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

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

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

string algorithm sorting tree lexicographic
1个回答
1
投票

最简单的方法是进行最重要的char-first基数排序。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.