【问题标题】:Computational complexity of base conversion碱基转换的计算复杂度
【发布时间】:2015-04-09 16:45:01
【问题描述】:

将一个非常大的 n 位数字转换为十进制表示有什么复杂性?

我的想法是重复整数除法的基本算法,取余数得到每个数字,会有O(M(n)log n)复杂度,其中M(n)是乘法算法的复杂度;但是,除法不是在 2 个 n 位数之间,而是在 1 个 n 位数和一个小的常数之间,所以在我看来,复杂度可能会更小。

【问题讨论】:

  • @xdavidliu:不需要花费 O(M(n)) 时间来计算一个大整数的商和余数 10。线性时间就足够了。
  • @tmyklebu 没关系,是的,这是正确的

标签: algorithm complexity-theory time-complexity base


【解决方案1】:

您所描述的朴素基数转换需要二次时间;你对n bigint-by-smallint 进行了划分,其中大部分时间与 n 位 bigint 的大小成线性关系。

您可以在 O(M(n) log(n)) 时间内进行基数转换,但是,通过选择目标基数的幂(大致为待转换数的平方根),进行除法运算- 剩下的(可以通过牛顿法在 O(M(n)) 时间内完成),并在两半上递归。

【讨论】:

  • 我想我的问题是除以一个小数是否可以在线性时间 O(n) 或更短的时间内完成。例如,除以 2 或 4 很简单 O(1);是否有除以 10 的 O(n) 算法?
  • 如何除以 2 O(1)?你必须转移所有位,不是吗?
  • @Tanner,是的,除以任何固定除数是 O(n),其中 n 是被除数的长度。只需使用通常的长除法算法。允许任意除数会改变事情。
  • @G.Bach,我认为这里的想法是,如果您将数字表示为 little-endian 位列表,您可以使用 drop 1 除以 2。
  • @Meekohi 尝试this link,第 14 页
猜你喜欢
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2017-11-04
  • 2012-12-31
  • 2019-03-11
相关资源
最近更新 更多