【发布时间】:2019-02-17 02:04:46
【问题描述】:
我正在寻找一种快速计算 n mod x1、n mod x2、n mod x3 的方法...我发现一篇关于“remainder trees”的文章声称可以做到这一点。
但是,我看不出上述方法比单独计算每个 mod 更好(即使上述 remaindersusingproducttree 的最后一步似乎就是这样做的)。我还对上面的代码进行了简单的基准测试,它似乎并没有运行得更快。
我的问题是,我猜“剩余树”在某种程度上比天真的方法更好,但我不明白如何。拜托,有人能解释一下吗?
或者,有没有其他方法可以快速计算许多mod 操作?
【问题讨论】:
-
快速浏览这篇文章,它似乎适用于当结果更长时除法变得更昂贵的用例(更小的除数意味着更多的操作)。您是否尝试过使用比计算机的原生类型大得多的数字测试用例,可能是 100 位左右?
-
@domen 是的,我试过了,没有区别。而且正如我上面所说的,最后一步似乎与幼稚的方法相同,所以我有点困惑。
-
最后一步与幼稚方法中的不完全相同。天真的方法计算 n mod x,对于可能非常大的 n。树算法首先通过应用 n mod(一些 x 的乘积)将 n 减少到更小的数字,然后使用这个更小的数字来计算最终结果。我同意@domen 的观点,当 n 非常大并且我们假设余数运算具有非常量的运行时间时,这可能很有用。
标签: algorithm optimization division modulo integer-division