algorithm - 编写一个方法来对两个不同字符串的字符进行排序,而不是对这些字符串的数组进行排序?

标签 algorithm

基本思想是对字符串进行排序并比较字符串的签名,其中签名是按字母顺序排序的字符串。

这样做的有效算法是什么?

最佳答案

如果您要“按字母顺序”对 UTF8 字符进行排序,则可以将它们转换为 32 位整数(UTF8 字符是 1 到 4 个 8 位值),然后执行 RADIX sort .它将在 O(N) 时间内工作。如果你只使用 ASCII,我会建议 Counting Sort .

有很多方法可以匹配签名,但我会使用 Hash Table (平均 O(1) )或 O(Lg N) 结构,例如 Red-Black TreesSkip-Lists .

为了进一步加快您的字符串匹配,您可以通过 Run Length Encoding 压缩这些签名这些 UTF8 字符(因为它们已排序,签名将是运行 + 间隙)。实际上,您可以压缩它们以使用位标记来表示 7 位字符(最常见)、RLE 运行和更长的文字(8 位到 32 位字符)。比较压缩字符串会更快。

关于algorithm - 编写一个方法来对两个不同字符串的字符进行排序,而不是对这些字符串的数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1490425/

相关文章:

java - 在 O(n) 时间和 O(1) 空间内将所有 x 元素插入数组末尾

javascript - 查找特定周长内的坐标的最快方法是什么?

java - 用 ANN 求解 XOR 的进化算法的改进

algorithm - 两个多项式相乘

algorithm - 前缀树的空间复杂度

python - 学习影响给定列表值的两个数据帧之间关系的最佳方法是什么?

java - 在java中实现埃及算法

algorithm - 查找矩阵组的数量

algorithm - 我应该如何在 3D 场景中指定矩形?

c++ - CPU 缓存感知 C++/C 编程