工作记录——2

Time:2020.01.16

PART One

这里首先定义了一个5*5的数组,目的是求解数组每行的最小的和次之的两个数据,该程序实现了矩阵每行最小的两个值的程序。
目的:为了求矩阵中每行最小的和次之的两个数据的位置,考虑先找到目标数据,然后对其定位。

int main() {
    nx=5;
    ny=5;
    //
    int b=100,a=30;
    vector<vector<double>> H(nx,vector<double>(ny));
    //产生一个30~100内的随机数组:
    for(int i=0;i<nx;i++){
        for(int j=0;j<ny;j++){
            H[i][j]=0.01+(rand()%(b-a+1)+a);
            cout<<"H[][]"<<H[i][j]<<endl;//打印出来康康
        }
    }
    //定义一个一维数组来存放5*5数组的每行的数据:
    double array[ny];
    for(int i=0;i<nx;i++){
        for(int j=0;j<ny;j++){
           array[j]=H[i][j];
            }
        double m1,m2;//存储两个最小值
        m1=9999; m2=9999;
        for(int i=0;i<ny;i++){
            if(array[i]<m1){
                m2=m1; 
                m1=array[i];
            }
            else if(array[i]<m2){ 
                m2=array[i]; 
            }
        }
       cout<<"m1:"<<m1<<endl;
       cout<<"m2:"<<m2<<endl;
    }
    return 0;
}

将其略作整理,改写成:

int main() {
    nx=5;
    ny=5;
    //
    int b=100,a=30;
    vector<vector<double>> H(nx,vector<double>(ny));
    double array[ny];
    for(int i=0;i<nx;i++){//一行一行处理,以下程序都是在i相同的前提下:
        for(int j=0;j<ny;j++){
            H[i][j]=0.01+(rand()%(b-a+1)+a);
            array[j]=H[i][j];
            //cout<<"H[][]"<<H[i][j]<<endl;
        }
        //对这一行的数据求目标值并输出该值:m1,m2
        double m1,m2;//存储两个最小值
        m1=9999; m2=9999;
        for(int i=0;i<ny;i++){
            if(array[i]<m1){
                m2=m1;
                m1=array[i];
            }
            else if(array[i]<m2){
                m2=array[i];
            }
        }
       cout<<"m1:"<<m1<<endl;
       cout<<"m2:"<<m2<<endl;
    }
    return 0;
}

PART Two

在第一部分的基础上,得到了每行的目标值,接下来的任务是定位目标值,并将其所在位置的值置为1,其余的值置为0。
本篇的前提是:矩阵是x集中的元素与y集中元素的几何距离,几何距离越小,理论上其感兴趣程度越高。
这一步的目的是为后边使用匈牙利算法匹配铺路,因为在匈牙利算法中,需要确定x集中的元素对y集中元素的感兴趣状况,将感兴趣为1,不感兴趣为0。
定位目标值并置位的好处在于,如果某行存在两个及以上的目标值,不会造成目标丢失的情况。

int main() {
    nx=5;
    ny=5;
    //
    int b=100,a=30;
    vector<vector<double>> H(nx,vector<double>(ny));
    vector<vector<double>> H1(nx,vector<double>(ny));
    double array[ny];
    for(int i=0;i<nx;i++){
        for(int j=0;j<ny;j++){
            H[i][j]=0.01+(rand()%(b-a+1)+a);
            array[j]=H[i][j];
            cout<<"H["<<i<<"]"<<"["<<j<<"]"<<H[i][j]<<endl;
        }
        double m1,m2;//存储两个最小值
        m1=9999;
        m2=9999;
        for(int k=0;k<ny;k++){
            if(array[k]<m1){
                m2=m1;
                m1=array[k];
            }
            else if(array[k]<m2){
                m2=array[k];
            }
        }
       //cout<<"m1:"<<m1<<endl;cout<<"m2:"<<m2<<endl;
       for(int l=0;l<ny;l++){
           if(array[l]==m1){
               H1[i][l]=1;
           }
           else if(array[l]==m2){
               H1[i][l]=1;
           }
           else {
               H1[i][l]=0;
           }
       }
    }
    for(int m=0;m<nx;m++){
        for(int n=0;n<ny;n++){
            cout<<"H1["<<m<<"]"<<"["<<n<<"]"<<g[m][n]<<endl
        }
    }
    return 0;
}
原创文章 15 获赞 8 访问量 923

猜你喜欢

转载自blog.csdn.net/weixin_39652282/article/details/104003164