将整数转换为十进制的高效算法

时间:2013-03-23 12:20:38

标签: algorithm

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

  

提供一种有效的算法,将给定的β - 位(二进制)整数转换为十进制表示。认为如果长度最多为β的整数的乘法或除法需要时间M(β),则可以在时间Θ( M(β) lg β)中执行二进制到十进制的转换。 (提示:使用分而治之的方法,通过单独的递归获得结果的上半部分和下半部分。

它要求时间Θ( M(β) lg β)。考虑到单独lg β是递归树的高度,分割和征服算法怎么可能呢?有谁知道预期的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

要使提示起作用,必须是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ᵈ。