当前位置: 面试刷题>> 点积 (经典算法题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实现
```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实现
```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实现
```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)来处理不等长的情况,以确保程序的健壮性。
- 每种语言都通过遍历向量元素并逐个相乘然后求和来计算点积。
- 在实际应用中,根据上下文,可能还需要考虑数值精度问题,尤其是在处理浮点数时。但在这个基本示例中,我们假设所有输入都是整数。