从左到右的基数排序

时间:2011-04-11 16:49:18

标签: algorithm string sorting radix-sort

基数排序将从租赁有效数字开始的数字排序到最高有效数字。 我有以下情况:

我的字母是英文字母,因此我的“数字”是英文字符串。这些字符串的字符从左到右一次显示。也就是说,首先显示所有字符串的最高位数,依此类推。在任何阶段,我都会有一组k个字符的长字符串,这些字符串已经过排序。此时,每个字符串都会显示一个字符。我想对新的字符串进行排序。如何在不从头开始的情况下有效地完成这项工作?

例如,如果我有以下有序集{for,for,sta,sto,sto}

在显示另外一个角色之后,该组是{form,fore,star,stop,stoc}

新的排序集应为{fore,form,star,stoc,stop}

我希望在添加每个新字符后复杂度为O(n),其中n是集合的大小。

1 个答案:

答案 0 :(得分:1)

如果你想在O(n)中这样做,你必须以某种方式跟踪“群组”:

for, for | sta | sto, sto

在这些组中,您可以根据字符串的最后一个字符对字符串进行排序,以保持字符集的排序。

可以通过各种方式存储组。乍一看,我会推荐一些记忆组合开头/结尾的偏移量。但是,这会消耗额外的内存。

另一种可能性是将字符串存储在某种prefix-tree中,这很自然地对应于“一个接一个地添加一个字符”,但我不知道这是否适合您的应用。