首页
社区
课程
招聘
[旧帖] [求助]关于稀疏矩阵的问题 0.00雪花
发表于: 2012-4-24 19:57 1272

[旧帖] [求助]关于稀疏矩阵的问题 0.00雪花

2012-4-24 19:57
1272
typedef struct
{
  int col;  //列
  int row;  //行
  int value;  
}term;

void transpose(term a[],term b[])
{
  int n, i, j, currentb;
  n = a[0].value;
  b[0].row = a[0].col;
  b[0].col = a[0].row;
  b[0].value = n;
  if(n>0) {                //非零元矩阵
    currentb = 1;
    for( i = 0; i < a[0].col; i++ ) {        //0-5 列
      for( j = 1; j <= n; j++ ) {        //1-8 元素总和 
        if( a[j].col == i ) {        //如果a[j].col 等于 列值
          b[currentb].row = a[j].col;
          b[currentb].col = a[j].row;
          b[currentb].value = a[j].value;
          currentb++;
        }
      }
    }
  }
}

a[0].value 是元素总和
a[0].col 是列总和
a[0].row 是行总和
从a[1]之后开始就是存储稀疏矩阵的3元组
书上说  如果按照行下标来处理原矩阵 那么<j,i,value>在转置矩阵中的确切位置,在其前面的所有元素未处理完之前不能确定的。
如果在转置矩阵中存放这些元组,那么插入这些新元组时,就必须移动元素以维护正确的顺序,所以通过列下标来确定元素转置阵列的位置。

谁能跟我说一下 行和列到底有什么区别啊。。 我不理解

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不能沉".........
2012-4-24 23:46
0
雪    币: 2993
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
对于一个矩阵,行和列本来就是对称的,从这个意义上讲,没有区别
2012-4-25 01:13
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
同意小三的说法。

原文的意思是:对于一个矩阵的行,如果发生了变化,则转置矩阵(就是旋转了九十度的)后当然变成了列。如果上面的行换成列,列换成行,当然也是对的。
2012-4-25 06:28
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
转置本来就是将行列互换,但由于稀疏矩阵存储的时候是非零元素线性顺序存储,其非零元素的行列序号与其在线性存储中的序号无一一对应关系
2012-4-26 08:16
0
游客
登录 | 注册 方可回帖
返回
//