【发布时间】:2014-10-28 10:43:19
【问题描述】:
我想找出计算 X^46 时,使用最佳 D&C 方法计算功率时发生了多少次乘法。
我认为这是使用分治法计算功率的最佳优化代码。
int power(int x, unsigned int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
return x*temp*temp;
}
在一篇为在 D&C 中使用最佳 Power 代码计算 X^46 所写的注释中,我们需要 8 次乘法,但在我的代码中有 10 次。有人纠正我吗?
编辑:
最后的代码是:
int power(int x, unsigned int y)
{
int temp;
if( y == 0)
return 1;
if( y ==1)
return x;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
return x*temp*temp;
}
【问题讨论】:
-
8 是从哪里来的?
-
我认为你深入。为什么需要一直持续到 y==0?当 y==1 或 2 时停止。它可以节省一些乘法。顺便说一句,如果您知道效率,请改用
y&0x1==0。 -
@OliCharlesworth 重复平方,32+8+4+2=46
-
@HuStmpHrrr 一个体面的编译器会为你做这样的替换。
-
顺便说一句。我不认为这算作分而治之,只是基本的递归。
标签: algorithm recursion data-structures divide-and-conquer