【问题标题】:Lexicographic sort O(m)字典排序 O(m)
【发布时间】:2018-03-05 02:58:44
【问题描述】:

假设我们有 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: 我认为尝试是一回事,但不确定它们的时间复杂度是否适用于此?

要获得最佳标记,请选择上述 3 项中的一项并解释其为何有效而其他项无效〜或包含指向良好算法的链接或提供答案〜关于您将如何设计在此时间限制下有效的算法?

【问题讨论】:

    标签: string algorithm sorting tree lexicographic


    【解决方案1】:

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

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

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

    【讨论】:

    • 好吧,选项 2 差不多。只需 1 个 qq,Trie 就可以工作吗?
    • 是的,Trie 也可以工作。创建 trie 并执行 DFS,打印路径。它将再次成为O(m) 解决方案。
    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 2011-08-01
    • 2011-05-06
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2013-05-01
    相关资源
    最近更新 更多