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

更具体地说,我需要执行以下操作:

  • 使用以36为底的正N位数字进行操作(例如,数字为0-9 A-Z)

    N是有限的,例如9
  • 提供基本算术,至少至少以下三个:
  • 加法(A + B)
  • 减法(A-B)
  • 整个部门,例如地板(A/B)。
  • 严格来说,我真的不需要base10转换功能-数字100%的时间在base36中。因此,如果解决方案未实现从base36到back10的转换,反之亦然,我就很好。

  • 我不太在乎解决方案是蛮力地“转换为base 10并返回”还是转换为二进制,还是“本地”执行baseN操作的更优雅的方法(如上所述,向/从base10转换不是需求)。我唯一的三个注意事项是:
  • 它符合
  • 以上的最低要求
  • 是“标准”。目前,我们使用的是基于base10转换的旧的自产模块,该转换是手工完成的。

    我宁愿用一些常用的CPAN解决方案代替它,而不是从头开始重写我自己的自行车,但是如果没有更好的标准可能性,我完全有能力制造它。
  • 它必须是快速运行的(尽管不能闪电般快速)。需要1秒才能得出2个9位base36数字的总和比我自己可以滚动的任何东西都要糟糕:)

  • 附言只是为了提供一些背景信息,以防人们除了回答上述技术问题外,还决定为我解决XY问题:)

    我们有一棵相当大的树(作为边缘存储在数据库中),我们需要在该树的子集上叠加顺序。树木的尺寸在深度和宽度上都很大。该树非常活跃地被更新(插入和删除以及分支移动)。

    目前,这是通过使用第二个表(包含3列)完成的:parent_vertex, child_vertex, local_order,其中local_order是由A-Z0-9(例如,基数为36的数字)组成的9个字符的字符串。

    其他注意事项:
  • 要求每个 child 的本地顺序是唯一的(显然每个 parent 是唯一的),
  • 对父级进行任何完整的重新排序都有些昂贵,因此,实现是尝试为0个和36个** 10-1之间均匀分配的订单(对于有X个 child 的父级)进行分配。没有树插入会导致完全重新排序。
  • 最佳答案

    Math::Base36呢?

    07-24 14:12