首页 > 解决方案 > 我得到一个 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;
}

标签: c++vector

解决方案


推荐阅读