对任意长度的二进制字符串进行基数排序

时间:2010-01-31 03:10:57

标签: string binary sorting radix

我google了一下,看到很多关于二进制字符串的基数排序的讨论,但它们都具有相同的长度,如何使用任意长度的二进制字符串?

说我有{“001”,“10101”,“011010”,“10”,“111”},我如何对它们进行基数排序?谢谢!

3 个答案:

答案 0 :(得分:2)

找到最大长度并将它们全部填充到该长度。如果最长字符串的长度有一些上限,那么仍应表现良好。

答案 1 :(得分:2)

你可以将它们全部填充为相同的长度,但是没有理由运行排序算法来确定二进制中的长度5数字大于长度2。通过按长度对数字进行分组并在每个组中运行基数排序,您可能会获得更好的性能。当然,这取决于您如何对它们进行分组,然后依赖于您如何对组进行排序。

如何执行此操作的一个示例是遍历所有项目并将它们全部放入哈希表(长度 - >该长度的数字)。这需要线性时间,然后让nlogn时间按顺序访问它们。基数排序在O(nk)时间内运行,其中n是项目数,k是它们的平均长度。如果你有一个大的k,那么O(nk)和O(nlogn)之间的差异是可以接受的。

答案 2 :(得分:-1)

如果创建大量新的字符串实例会留下讨厌的味道,请自己编写比较。

比较没有前导0的字符串长度(即找到firstIndexOf("1"));较长的弦更大。
如果两者的长度相同,只需逐个字符地继续比较它们,直到找到两个不同的字符 - 带有“1”的字符串就越大。