algorithm - 你如何确定计算 X 的 30 次方的最小乘法次数?

标签 algorithm multiplication

在书中Algorithms for interviewers ,有这样一个问题:

How would you determine the minimum number of multiplications to evaluate X to the power 30?

谁能告诉我这个问题是什么意思?

“计算 X 的 30 次方”是什么意思?

我猜有两种可能的含义:

  1. 我们有一个 X,然后这个问题问我“计算 X^30 需要多少次乘法?”。
  2. 我们有一个 X,然后它问我“y 是多少才能使 y^30 = X,你需要乘多少次才能计算出 y?”

我不知道我猜的哪个是正确的,或者它有第三层含义?

谢谢

最佳答案

题目假设有一种方法可以写一个函数:

int f(int x) { return pow(x, 30); }

仅使用乘法。

事实上,一种方式如下:

int f(int x)
{
    int y = 1;
    for (int i = 0; i < 30; i++)
        y *= x;
    return y;
}

这使用了 30 次乘法。

但是考虑一下:

int f(int x)
{
    int z = x*x;
    int y = 1;
    for (int i = 0; i < 15; i++)
        y *= z;
    return y;
}

这使用了 16 次乘法。

所以问题是问乘法的最小次数是多少?

这里有 6 个乘法,可能是面试官理想的解决方案:

int f(int x)
{
    x_3 = x * x * x;
    x_6 = x_3 * x_3;
    x_12 = x_6 * x_6
    x_24 = x_12 * x_12
    return x_24 * x_6
}

这与其说是一个编程问题,不如说是一个脑筋急转弯。实幂函数不使用乘法(或者至少不使用问题暗示的方式)

关于algorithm - 你如何确定计算 X 的 30 次方的最小乘法次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9996848/

相关文章:

assembly - 将有符号数乘以无符号数时,我应该使用 "mul"还是 "imul"?

algorithm - 混合函数的增长顺序

algorithm - 查找无向图中两个顶点之间所有简单路径上的所有*顶点*

algorithm - 对 [1, 5000] 范围内 1000 个不同整数的数组进行排序,每个元素最多访问一次

Javascript,乘以最后一个循环数

python - 如何在 Python 中创建水平九九乘法表?

java - Java 新手 : what are the bits between i and j in 10000000000

algorithm - 寻找到水的最短距离

r - 分散NA值的矩阵乘法

javascript - 如何使用 jQuery 和乘法行和列创建 HTML 表格