
在线性代数中,计算点积是一种基础的操作。给出两个向量,向量
和向量
,它们的点积计算公式如下:
,表示向量的维数(元素个数);
个整数,表示向量
的元素值;
个整数,表示向量
的元素值;
输入:
3
1 2 3
4 5 6输出:
36根据示例,点积计算流程如下:
以上是题目的核心内容和基础分析,接下来将分别分析两种解法,并进行比较和进一步优化。
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int arr1[n];
int arr2[n];
for(int i = 0; i < n; i++)
{
cin >> arr1[i];
}
for(int i = 0; i < n; i++)
{
cin >> arr2[i];
}
int result = 0;
for(int i = 0; i < n; i++)
{
result += arr1[i] * arr2[i];
}
cout << result;
return 0;
} 
#include <iostream>
using namespace std;
const int N = 1010;
int arr1[N];
int arr2[N];
int main()
{
int n = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr1[i];
}
for (int i = 0; i < n; i++) {
cin >> arr2[i];
}
int ret = 0;
for (int i = 0; i < n; i++) {
ret += arr1[i] * arr2[i];
}
cout << ret << endl;
return 0;
}
;
和
的值;
ret 中;const int N = 1010;
int arr1[N];
int arr2[N];)。
for (int i = 0; i < n; i++) {
cin >> arr1[i];
}
for (int i = 0; i < n; i++) {
cin >> arr2[i];
}for 循环,分别读取向量 和
的值并存入数组。
int ret = 0;
for (int i = 0; i < n; i++) {
ret += arr1[i] * arr2[i];
}
cout << ret << endl;ret。for 循环可以依次访问数组中的元素。。
#include <iostream>
using namespace std;
const int N = 1010;
int arr1[N];
int main()
{
int n = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr1[i];
}
int ret = 0;
for (int i = 0; i < n; i++) {
int b;
cin >> b;
ret += arr1[i] * b;
}
cout << ret << endl;
return 0;
}在这里插入图片描述
;
的值;
的值时,即时计算点积并累加;
const int N = 1010;
int arr1[N];的值。
for (int i = 0; i < n; i++) {
cin >> arr1[i];
}
int ret = 0;
for (int i = 0; i < n; i++) {
int b;
cin >> b;
ret += arr1[i] * b;
}for 循环读取向量 的值;
for 循环在读取向量 的值时,直接计算点积并累加。
cout << ret << endl;的值,直接在输入时进行运算。
。
比较点 | 解法一 | 解法二 |
|---|---|---|
存储方式 | 两个数组,完整存储输入 | 一个数组,即时计算点积 |
空间复杂度 | O ( n ) O(n) O(n) | O ( n ) O(n) O(n) |
时间复杂度 | O ( n ) O(n) O(n) | O ( n ) O(n) O(n) |
代码结构 | 清晰,适合需要完整数据的场景 | 紧凑,适合仅需计算结果的场景 |
适用场景 | 输入数据需多次操作或复用 | 输入数据仅用于计算点积 |
时间复杂度
代码结构清晰,适合需要完整数据的场景紧凑,适合仅需计算结果的场景适用场景输入数据需多次操作或复用输入数据仅用于计算点积
通过对两种方案的分析可以看出:
如果对代码的可读性和现代化有更高的要求,可以使用 C++ 的标准库容器(如 std::vector)和算法函数(如 std::inner_product)来简化代码,实现更加简洁的向量点积计算:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n), b(n);
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n; i++) cin >> b[i];
int result = inner_product(a.begin(), a.end(), b.begin(), 0);
cout << result << endl;
return 0;
}std::vector 动态分配内存,避免了固定大小数组的限制;std::inner_product 函数直接计算点积,代码更加简洁。通过上述分析与代码优化,相信读者能够更清晰地理解向量点积计算的实现方式,并在实际编程中选择合适的方法来解决类似问题。