第四章学习小结

前情提要:

想和大家一起聊聊稀疏矩阵这道题目,回顾题目如下:

课本并没有提及太多的稀疏矩阵相关知识,但通过老师的课堂讲解和网课的辅助,我们还是可以掌握解答稀疏矩阵相关问题的方法。

舍友推荐的网课参考资源链接为:https://www.icourse163.org/learn/HZAU-1002739008?tid=1206075203#/learn/content?type=detail&id=1210501249&cid=1212630398。

 

复习:

稀疏矩阵是指矩阵中大多数元素为零的矩阵。(一般的矩阵中,非零元素只占矩阵元素总数的25%—30%,或低于这个百分比)。解答这道题目可以采用两种方法:三元组表法和十字链表法。我希望先就三元组表法进行交流。

三元组是用来存储稀疏矩阵的一种压缩方法,因为稀疏矩阵中零元素数量较多,所以三元组只存储非零元素,并标记该非零元素对应的行下标和列下标。也就是说,稀疏矩阵中的每一个非零元素需由一个三元组(r,c,v)唯一确定,稀疏矩阵中的所有非零元素构成三元组线性表.其中,r表示行下标,c是列下标,而v表示对应的非零元素值。示意图如下:

 

 

解题:

这道题目的思路十分纯粹:定义三元组→输入数据→查询(需定义一个函数)→输出。有了基本的思路之后,我们就可以顺藤摸瓜,将代码打出来:

①定义三元组:

#define MAXSIZE 500
typedef struct Triple{
    int r,c;                                 //定义非零元素的行下标和列下标 
    int v;                                   //定义非零元素数值 
}Triple;
typedef struct TSMatrix
{
    Triple data[MAXSIZE+1];                  //定义非零元素的三元组表
    int m,n,N;                               //定义矩阵的行数、列数和非零元素的个数 
}TSMatrix; 

②输入数据:

int main(){
    TSMatrix T;
    int x,i,j,k,a,b;
    cin>>T.m>>T.n>>T.N;                      // 输入矩阵的行数、列数和非零元素的个数 
     
    for(k=1;k<=T.N;++k){
        cin>>i>>j>>a;                        //输入元素的行下标,列下标,非零元素的元素值
    T.data[k].r=i;
    T.data[k].c=j;
    T.data[k].v=a;
    }

🌂编辑查询程序:

int Find(TSMatrix &T,int x)
{
    int i;
    for(i=1;i<=T.N;i++)                      //遍历三元组表中的非零元素的值。若查找成功,则返回非零元素所在数组中的位置 i,否则返回-1 
    {                                        
        if(T.data[i].v==x)
        return i;
    }
    return -1;
}

④输出结果

 cin>>x;                                  //输入查询元素的值 
    b=Find(T,x);                             //查询非零元素的位置
    if(b!=-1) cout<<T.data[b].r<<" "<<T.data[b].c<<endl;                   //查找成功,返回位置i
    else cout<<"ERROR";                                                    //查找失败,输出ERROR

呀呼~就这么自然地,题目就解出来啦!拿到题目,冷静思索,整理出基本思路,再一项项突破,题目总会迎刃而解的。

 

反思:

上次提及的第一次小测没考好,不过我不会气馁的,毕竟灰心丧气也没有用,只有不懈的努力才能挽回、见成效。之前强调的及时整理、复习也努力做到了,可是总还存在有些赶不上其他人学习效果的情况,果然是基础不牢固的缘故。接下来一个星期,还是一如既往地希望自己能够认真认真再认真地学习,把握之前老师说过的正确的学习方法。进步是急不来的,总要一点点追赶。不怕,按自己的节奏,扎实、点滴进步就好。学习就像马拉松,不在乎突然的爆发力,持久的坚持才是王道。

请期待下一次考试的逆袭吧!

 

posted @ 2019-04-14 19:16  Haylie  阅读(187)  评论(1编辑  收藏  举报