当前位置: 面试刷题>> 点积 (经典算法题500道)


完整题目描述

题目:实现向量点积(Dot Product)的算法

在数学中,向量点积(也称为内积或标量积)是一种代数运算,它接受两个等长的数字序列(通常是坐标向量),并返回一个单一的数字。对于两个n维向量 A = (a1, a2, ..., an) 和 B = (b1, b2, ..., bn),它们的点积定义为:

$$ \mathbf{A} \cdot \mathbf{B} = \sum_{i=1}^{n} a_i b_i = a_1b_1 + a_2b_2 + \cdots + a_nb_n $$

请编写一个函数来计算两个向量的点积,并使用PHP、Python和JavaScript分别实现这个函数。

PHP实现

function dotProduct($vectorA, $vectorB) {
    $length = count($vectorA);
    if ($length !== count($vectorB)) {
        throw new Exception("Vectors must be of the same length.");
    }

    $result = 0;
    for ($i = 0; $i < $length; $i++) {
        $result += $vectorA[$i] * $vectorB[$i];
    }
    return $result;
}

// 示例
$vectorA = [1, 2, 3];
$vectorB = [4, 5, 6];
echo dotProduct($vectorA, $vectorB); // 输出 32

Python实现

def dot_product(vectorA, vectorB):
    if len(vectorA) != len(vectorB):
        raise ValueError("Vectors must be of the same length.")

    return sum(a * b for a, b in zip(vectorA, vectorB))

# 示例
vectorA = [1, 2, 3]
vectorB = [4, 5, 6]
print(dot_product(vectorA, vectorB))  # 输出 32

JavaScript实现

function dotProduct(vectorA, vectorB) {
    if (vectorA.length !== vectorB.length) {
        throw new Error("Vectors must be of the same length.");
    }

    let result = 0;
    for (let i = 0; i < vectorA.length; i++) {
        result += vectorA[i] * vectorB[i];
    }
    return result;
}

// 示例
let vectorA = [1, 2, 3];
let vectorB = [4, 5, 6];
console.log(dotProduct(vectorA, vectorB)); // 输出 32

注意事项

  • 在每个实现中,我们都首先检查了输入向量的长度是否相等,因为点积要求两个向量等长。
  • 使用异常(PHP、Python)或错误(JavaScript)来处理不等长的情况,以确保程序的健壮性。
  • 每种语言都通过遍历向量元素并逐个相乘然后求和来计算点积。
  • 在实际应用中,根据上下文,可能还需要考虑数值精度问题,尤其是在处理浮点数时。但在这个基本示例中,我们假设所有输入都是整数。
推荐面试题