字典排序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. 通过删除字母匹配到字典里最长单词(排序+判断子序列)