c++ - 我得到一个 Linker 2005 错误已经在 naive.obj 中定义并且已经在 strassen.obj 中定义
问题描述
当我运行时,我得到一个 Linker2005 错误已经在 naive.obj 中定义并且已经在 strassen.obj 中定义,我不知道我做错了什么?
是的,我还没有实现 strassen 函数,所以我从输入返回相同的向量 a
压力代码用于比较两种算法。
我的代码有 3 个 cpp 文件:
天真.cpp
#include <bits/stdc++.h>
using namespace std;
/**
* implement the naive matrix multiplication algorithm
*
* @param
* a --> a 2d vector
* b --> a 2d vector
*
* @return
* the result of a*b "matrix multiplcation"
*/
//const int n = 128;
vector<vector<int>> naive(vector<vector<int>>a, vector<vector<int>>b) {
int n = 128;
vector<vector<int>> c(n, vector<int>(n, 0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
c[i][j] = 0;
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
return c;
}
施特拉森.cpp
#include <bits/stdc++.h>
using namespace std;
/**
* implement strassen divid and conquer algorithm for matrix multiplication
*
* @param
* a --> a 2d vector
* b --> a 2d vector
*
* @return
* the result of a*b "matrix multiplcation"
*/
vector<vector<int>> strassen(vector<vector<int>>a, vector<vector<int>>b){
//vector<vector<int>> c;
return a;
}
压力.cpp
#include <bits/stdc++.h>
#include <chrono>
#include <thread>
#include "naive.cpp"
#include "strassen.cpp"
using namespace std;
/**
* generate 2 2d-vectors with fixed size 128*128
*
* @return
* a 2d vector with size 128*128 contains random numbers
*
*/
vector<vector<int>> generate_random_vector() {
int n = 128;
vector<vector<int>> x(n,vector<int>(n));
for (int i = 0; i < 128; i++) {
for (int j = 0; j < 128; j++) {
x[i][j] = rand() % 100;
}
}
return x;
}
/**
* driving stress test for both algorithms
*
* generate 2 2d-vectors with fixed size 128*128
* compare their output and runnig time
*/
int main(int argc, char **argv)
{
while (true)
{
vector<vector<int>> a = generate_random_vector();
vector<vector<int>> b = generate_random_vector();
vector<vector<int>> naive_result;
vector<vector<int>> strassen_result;
auto naive_start = std::chrono::high_resolution_clock::now();
// fill this line
naive_result = naive(a, b);
auto naive_finish = std::chrono::high_resolution_clock::now();
auto strassen_start = std::chrono::high_resolution_clock::now();
// fill this line
strassen_result = strassen(a, b);
auto strassen_finish = std::chrono::high_resolution_clock::now();
auto naive_time = (naive_finish - naive_start).count();
auto strassen_time = (strassen_finish - strassen_start).count();
if (strassen_result == naive_result)
{
cout << "equivalent result ";
cout << "naive_time ==> " << naive_time;
cout << "strassen_time ==> " << strassen_time;
cout << "performance enhancment ==>" << naive_time / strassen_time << endl;
}
else
{
cout << "error, check your inputs and algortihms " << endl;
// you may want to store your variables in a file to re-run the test on the same inputs;
break;
}
}
return 0;
}
解决方案
推荐阅读
- plotly-dash - Dash 客户端回调与 dcc.store
- react-native - 如何在 ListView 中“自动突出显示”项目
- excel - 如何从两个科目都失败的同一张 Excel 表中提取姓名
- git - Git Push 每次都失败
- python - 使用 python boto3 在 aws 中创建一个新文件夹
- excel - excel 2016 vba非易失性用户定义函数重新计算意外
- firebase - Firebase,不安全的规则
- elasticsearch - Elasticsearch .NET 在文档的多个字段中搜索字段值的完全匹配
- android - 如何创建模拟 Json API 来测试 android 应用程序?
- javascript - 将状态对象反应到数字