微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Perl中执行base36算法的最佳方法是什么?

在Perl中执行base36算法的最佳方法是什么?

更具体地说,我需要能够做到以下几点:

>在基数为36的正n位数字上运算(例如数字为0-9 A-Z)

N是有限的,比如说9
>提供基本算术,至少以下3:

>加法(A B)
>减法(A-B)
>整体划分,例如地板(A / B).
>严格来说,我真的不需要base10转换能力 – 数字将100%的时间都在base36中.所以我很好,如果解决方案没有实现从base36转换回base10,反之亦然.

我不太关心解决方案是否是暴力“转换为基础10并返回”或转换为二进制,或者一些更优雅的方法“本地”执行baseN操作(如上所述,往返于base10转换不是需求).我唯一的三个注意事项是:

>符合上述最低规格
>这是“标准”.目前我们正在使用基于base10转换的老本土模块,这种模块是手动完成的,这种模块很糟糕,很糟糕.

我宁愿用一些常用的CPAN解决方案取而代之,而不是从头开始重新编写自己的自行车,但如果不存在更好的标准可能性,我完全有能力构建它.
>它必须是快速的(虽然不是闪电般快).需要1秒才能总结2个9位数的base36数字的东西比我自己可以滚动的任何东西都差:)

附:只是提供一些上下文,以防人们决定解决我的XY问题,除了回答上面的技术问题:)

我们有一个相当大的树(作为一堆边存储在DB中),我们需要在该树的子集上叠加顺序.树的尺寸在深度和宽度方面都很大.树非常积极地更新(插入和删除以及分支移动).

这是通过具有3列的第二个表来完成的:parent_vertex,child_vertex,local_order,其中local_order是由A-Z0-9构建的9个字符的字符串(例如,基数36的数字).

其他考虑因素

>要求每个孩子的本地订单是唯一的(并且每个父母显然是唯一的),
>父母的任何完整的重新排序都有点贵,因此实现是尝试为具有X子的父级分配 – 在0到36 ** 10-1之间有点均匀分布的顺序,这样几乎没有树插入导致完全重新排序.

解决方法

Math::Base36怎么样?

原文地址:https://www.jb51.cc/Perl/171763.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐