基数排序是不是用于后缀排序?

Posted

技术标签:

【中文标题】基数排序是不是用于后缀排序?【英文标题】:Is radix sort used for suffix sorting?基数排序是否用于后缀排序? 【发布时间】:2011-06-15 03:26:27 【问题描述】:

我正在尝试实现块排序。这是来自 Burrows Wheeler paper。

(在此步骤之前,您创建一个 S 的 V 后缀数组)

第四季度。 [基数排序] 对 V 的元素进行排序,使用每个后缀的前两个字符作为 排序键。这可以使用基数排序有效地完成。

所以我知道您正在使用基数排序对后缀进行排序。 这应该如何更新数组 V?只有在基数排序完成后,我才能知道后缀的排序位置。假设第 4 个后缀最终成为排序后的第一个。所以 V[0] = i。在这种情况下,我们知道(因为我告诉过你)i = 4。但是算法如何知道这一点,因为我们没有跟踪它们的位置。我应该创建一个包含后缀及其后缀编号的类吗?

【问题讨论】:

【参考方案1】:

快速阅读后;我认为 Burrows-Wheeler 有一个错误,意思是说使用数组 V 对 W 的元素进行排序,以跟踪和映射 W 元素的最终位置。即。这样 W 不变,V 包含一个排序的索引列表。

论文似乎将 V 视为指向 W 中元素的指针数组。

查看http://michael.dipperstein.com/bwt/页面底部有很好的算法描述和源代码。

【讨论】:

我不这么认为,您实际上必须对后缀进行排序。也许他的意思是你实际上对 V 和 W 都进行了排序(肯定是 V)。这篇论文是如此的模棱两可和不完整,让我想轰炸作者的房子。 好吧,也许吧。我认为它的意思是使用 W[i] 的后缀作为每行 i 的键对 W 进行排序 - 并将结果存储在 V 中。 哈,是的,不幸的是,学术论文中不完整很常见。 查看该行... W[V[i]] 的新值排序到与旧值相同的位置,但具有与所有其他值不同的理想属性W...这似乎是对 V 和 W 的预期的关键点。 给你。你查看过这个网站michael.dipperstein.com/bwt 吗?他还有一个实现的链接,因此您可以阅读代码。

以上是关于基数排序是不是用于后缀排序?的主要内容,如果未能解决你的问题,请参考以下文章

后缀排序

用于浮点数的快速、基于等级的基数排序?

基数排序总结

初学后缀数组记录(然而并不是很会。。&&很水。。)

基数排序的奇技淫巧

字符串算法—字符串排序(下篇)