字典排序O(m)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典排序O(m)相关的知识,希望对你有一定的参考价值。

假设我们有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中的一个并解释它为什么有效,而其他人没有〜或者包含一个良好算法的链接或提供答案〜你将如何设计在这个时间限制下工作的算法?

答案

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

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

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

以上是关于字典排序O(m)的主要内容,如果未能解决你的问题,请参考以下文章

[M贪心] lc524. 通过删除字母匹配到字典里最长单词(排序+判断子序列)

[M贪心] lc524. 通过删除字母匹配到字典里最长单词(排序+判断子序列)

BPM实例分享:玩转数据字典新技能-字典库排序

拓扑排序(输出字典序最小的)

c#字典dictionary绑定datagridview如何排序

给定一个字符串数组,返回所有的字谜字符串组