有没有办法有效地将二进制字符串或文件转换为base 5而不必将一个var中的所有位存储为数字?
例如对于base64,你可以只创建log2(64)= 6位的组。
编辑:感谢您的回答,但我再次提到这一点:该算法适用于文件。如果文件太大而无法存储在单个int变量中,那么执行通常的n % base
转换就不会有任何好处。
答案 0 :(得分:0)
假设您必须在内存中存储最终号码的表示,我们可以O(n * d)
时间,O(d)
空格,其中n
是位数原始和d
转换数字中的位数,通过基数5中的一系列加法,保持基数5中的当前幂2(我们最多添加其中一个)和结果。小优势是通过长乘法模式5生成下一个power-of-2-in-base-5
:
44(10)
101100(2)
power-of-2-in-base-5, result
1, 0
2, 0
4, 4
13, 22
31, 22
112, 134
如果它可以提供任何加速,我们可以通过表查找避免实际的乘法和加法运算,因为每个运算符mod 2只有25个组合。