【问题标题】:Efficient algorithm to convert integer to decimal将整数转换为十进制的高效算法
【发布时间】:2013-03-23 12:20:37
【问题描述】:

CLRS 算法书的问题 31.1-12 提出以下问题:

给出一个有效的算法将给定的β-bit(二进制)整数转换为十进制表示。论证如果长度最大为β的整数的乘除需要时间M(β),那么二进制到十进制的转换可以及时执行Θ( M(β) lg β)。 (提示: 使用分而治之的方法,通过单独的递归获得结果的上半部分和下半部分。

它要求时间Θ( M(β) lg β)。考虑到 lg β 本身就是递归树的高度,分而治之的算法怎么可能呢?有谁知道预期的解决方案是什么?

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    要使提示起作用,M(β) 必须是线性函数;特别是,M(β) ≈ 2·M(β/2)。

    如果给定,有一个明显的解决方案:递归地将数据拆分为部分,分别处理这些部分,然后组合结果。在递归的第 k 层,将有 2ᵏ 个部分,每个部分的长度大约为 β/(2ᵏ) 位,或总共约为 β。第 k 层的处理花费 2ᵏ·M(β/(2ᵏ)) ≈ M(β),因此总时间为 O(M(β)·lg β)。

    用 β 位分割一个值 u 并处理它的两个部分 (v,w),令 2·d 或 2·d+1 = ⌊β·ln(2)/ln(10)⌋;让 v = ⌊u/10ᵈ⌋ 和 w = u-v·10ᵈ。

    【讨论】:

    • 我认为这本书实际上是建议将 M 视为一个常数,因此我们需要使用 lg B 乘法进行转换。这个答案仍然是 2^k ~ O(B) 乘法,所以可能不是这本书要找的。假设加法要便宜得多,因此乘法的成本占主导地位。
    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 2014-04-16
    • 2018-08-08
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多