三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
2014-10-12 20:59
706 查看
三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
用经典矩阵转置算法和普通的三元组矩阵转置在时间复杂度上都是不乐观的。快速转置算法在增加适当存储空间后实现快速转置具体原理见代码注释部分,时间复杂度为O(nu+tu);个人认为重排三元组之间的次序一步可以省略,虽然三元组数据变得杂乱无章,但是可以把时间复杂度提高到O(tu),如果是不考虑三元组,直接输出转置后的矩阵就可以采用这种方法;行逻辑链接实现稀疏矩阵相乘,十字链表实现稀疏矩阵相加正在编写中,即将更新。声明:转载,引用请以链接形式指明出处。
三元组类Triple.java
package稀疏矩阵的运算; publicclassTriple<T>{ introw,col; Tv; publicTriple(){} publicTriple(introw,intcol,Tv){ this.row=row; this.col=col; this.v=v; } }
稀疏矩阵类Mat.java[/code]
package稀疏矩阵的运算; publicclassMat{ finalintMAXSIZE=10; intmu,nu,tu; Triple<Integer>data[]=newTriple[MAXSIZE+1];//Java不支持泛型数组 publicMat(intmu,intnu,inttu){ this.mu=mu; this.nu=nu; this.tu=tu; for(inti=1;i<=MAXSIZE;i++) data[i]=newTriple(); } publicvoiddisplay(){ inti,j,k,m,n,count=0; for(i=1;i<=mu;i++){ for(j=1;j<=nu;j++){ for(k=1;k<=tu;k++){ if(i==data[k].row&&j==data[k].col){ System.out.print(data[k].v+""); count=-1; break; } } if(count!=-1) System.out.print("0"); count=0; } System.out.println(); } } }
[/code]
快速转置Transfer.java
package稀疏矩阵的运算; importjava.util.*; publicclassTransfer{ publicstaticvoidmain(String[]args){ inti,j,k,l; Scannerscan=newScanner(System.in); System.out.println("请输入矩阵的行数,列数,非零元的个数:"); intmu,nu,tu; mu=scan.nextInt(); nu=scan.nextInt(); tu=scan.nextInt(); MatM1=newMat(mu,nu,tu); MatM2=newMat(nu,mu,tu); System.out.println("请输入矩阵的三元组:"); for(i=1;i<=tu;i++){ M1.data[i].row=scan.nextInt(); M1.data[i].col=scan.nextInt(); M1.data[i].v=scan.nextInt(); } System.out.println("您输入的矩阵为:"); M1.display(); //增加两个向量 intnum[]=newint[nu+1];//M1中第col列中非零元的个数 intcol,row,t; for(col=1;col<=nu;col++){ num[col]=0; } for(t=1;t<=tu;t++){ num[M1.data[t].col]++; } intcpot[]=newint[nu+1];//M1中第col列的第一个非零元在M2.data中的位置。 cpot[1]=1; for(col=2;col<=nu;col++){ cpot[col]=cpot[col-1]+num[col-1]; } intp,q;//实现转置 for(p=1;p<=tu;p++){ col=M1.data[p].col; q=cpot[col]; M2.data[q].row=M1.data[p].col; M2.data[q].col=M1.data[p].row; M2.data[q].v=M1.data[p].v; cpot[col]++; } System.out.println("转置后的矩阵为:"); M2.display(); } }
[/code]
相关文章推荐
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 稀疏矩阵的压缩存储与快速转置 三元组法 类与对象实现
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- C++实现稀疏矩阵的压缩存储、转置、快速转置
- 稀疏矩阵的压缩存储及转置,快速转置法,C++代码实现
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- 三元组实现稀疏矩阵的压缩存储与转置 (Sparse matrix compression storage and transposition base on triple)
- 数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
- 稀疏矩阵的压缩存储及快速转置
- 稀疏矩阵的压缩存储以及快速转置
- 数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
- 稀疏矩阵-压缩存储-列转置法- 一次定位快速转置法
- 稀疏矩阵的存储方式及其快速转置的实现
- 稀疏矩阵--三元组表来压缩存储及转置
- 5.3矩阵的压缩存储(稀疏矩阵转置和快速转置)
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- 用三元组存储稀疏矩阵并实现转置
- 数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵转置
- 稀疏矩阵-压缩存储-列转置法- 一次定位快速转置法
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储