在Perl中执行base36算法的最佳方法是什么?
更具体地说,我需要能够做到以下几点:
在基数为36的正N位数字上运算(例如数字为0-9 AZ)
N是有限的,比如说9
提供基本算术,至少以下3:
加法(A + B)
减法(AB)
整个部门,例如楼层(A/B).
严格来说,我真的不需要base10转换能力 - 数字将100%的时间在base36中.所以我很好,如果解决方案没有实现从base36转换回base10,反之亦然.
我不太关心解决方案是否是暴力"转换为基础10并返回"或转换为二进制,或者一些更优雅的方法"本地"执行baseN操作(如上所述,往返于base10转换不是需求).我唯一的三个注意事项是:
它符合上述最低规格
这是"标准".目前我们正在使用基于base10转换的老本土模块,这种模块是手动完成的,这种模块很糟糕,很糟糕.
我宁愿用一些常用的CPAN解决方案取而代之,而不是从头开始重新编写自己的自行车,但如果不存在更好的标准可能性,我完全有能力构建它.
它必须是快速的(虽然不是闪电般快).需要1秒才能总结2个9位数的base36数字的东西比我自己可以滚动的任何东西都差:)
PS只是提供一些上下文,以防人们决定解决我的XY问题,除了回答上面的技术问题:)
我们有一个相当大的树(作为一堆边存储在DB中),我们需要在该树的子集上叠加顺序.树的尺寸在深度和宽度方面都很大.树非常积极地更新(插入和删除以及分支移动).
目前这是通过具有3列的第二个表来完成的:parent_vertex, child_vertex, local_order其中local_order是由A-Z0-9构建的9个字符的字符串(例如,基数36的数字).
其他考虑因素
要求每个孩子的本地订单是唯一的(并且每个父母显然是唯一的),
父母的任何完整的重新排序都有些昂贵,因此实现是尝试为具有X个子节点的父节点分配在0到36**10-1之间有些均匀分布的顺序,因此几乎没有树插入导致完全重新排序.
我在Java中寻找一个不错的BaseN编码器(带有自定义字符集),不受输入数据大小(字节数组)的限制.
像这样的东西:
但对于"无限制"的数据长度没有任何不必要的内存/性能损失和"BigInteger滥用魔法".只是作为标准BASE64编码器工作的东西,但普遍适用于任何基础/字符集.任何解决方案或想法如何实现这一点都受到欢迎.
也许,如果有人有apache BaseNCodec的经验:
它看起来很有前景,但它是一个抽象类,并且可用的实现看起来比从头开始看起来更难.
"ABCDE" = Base5,"ABCDE-+*/." = Base10,...).
我想创建一个程序来生成给定base-n的系列.,例如,如果我的输入是2,那么系列应该是00,01,10,11等,(二进制)如果我的输入是10,那么系列应该是1,2,3,4,5等.,(十进制)
是否有任何一般机制来找到这些数字,以便我可以为base-n编程.
更新: - 之后,锻炼.,我面临问题.
如果我想处理那个整数怎么做?有人评论说,我应该使用BaseInteger类.请详细说明