CLRS算法书的问题31.1-12提出以下问题:
提供一种有效的算法,将给定的
β
- 位(二进制)整数转换为十进制表示。认为如果长度最多为β
的整数的乘法或除法需要时间M(β)
,则可以在时间Θ( M(β) lg β)
中执行二进制到十进制的转换。 (提示:使用分而治之的方法,通过单独的递归获得结果的上半部分和下半部分。
它要求时间Θ( M(β) lg β)
。考虑到单独lg β
是递归树的高度,分割和征服算法怎么可能呢?有谁知道预期的解决方案是什么?
答案 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ᵈ。