三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
2014-10-16 23:40
961 查看
不用十字链表也可以稀疏矩阵相加时间复杂度最坏情况达到O(tuA + tuB);思路比较简单就不赘述了,代码如下:
三元组:
构建矩阵存储结构:
相加:
三元组:
package 行逻辑链接的顺序表实现稀疏矩阵的相乘; public class Triple<T> { int row,col; T v; public Triple(){} public Triple(int row,int col, T v){ this.row = row; this.col = col; this.v = v; } }
构建矩阵存储结构:
package 行逻辑链接的顺序表实现稀疏矩阵的相乘; public class Mat { final int MAXSIZE = 10; int mu,nu,tu; int rpos[] = new int[MAXSIZE + 1];//各行第一个非零元的位置表 Triple<Integer> data[] = new Triple[MAXSIZE + 1];//Java不支持泛型数组 public Mat(int mu,int nu,int tu){ this.mu = mu; this.nu = nu; this.tu = tu; for(int i=1; i<=MAXSIZE; i++) data[i] = new Triple(); } //三元组矩阵的输出 public void display(){ int i,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(); } } }
相加:
package 行逻辑链接的顺序表实现稀疏矩阵的相乘; import java.util.*; public class AddMat { public static void main(String[] args) { /* * @author 王旭 * @time 2014/10/14/23:50 * */ Scanner scan = new Scanner(System.in); int muA,nuA,tuA,muB,nuB,tuB; System.out.println("请输入A矩阵的行,列,非零元的个数:"); muA = scan.nextInt(); nuA = scan.nextInt(); tuA = scan.nextInt(); Mat A = new Mat(muA,nuA,tuA); System.out.println("请输入A矩阵的三元组:"); for(int i=1; i<=tuA; i++){ A.data[i].row = scan.nextInt(); A.data[i].col = scan.nextInt(); A.data[i].v = scan.nextInt(); } System.out.println("A矩阵为:"); A.display(); System.out.println("请输入B矩阵的行,列,非零元的个数:"); muB = scan.nextInt(); nuB = scan.nextInt(); tuB = scan.nextInt(); Mat B = new Mat(muB,nuB,tuB); System.out.println("请输入B矩阵的三元组:"); for(int i=1; i<=tuB; i++){ B.data[i].row = scan.nextInt(); B.data[i].col = scan.nextInt(); B.data[i].v = scan.nextInt(); } System.out.println("B矩阵为:"); B.display(); Mat C = new Mat(muA,nuA,1); add(A,B,C); System.out.println("相加后的矩阵C为:"); C.display(); } public static void add(Mat A, Mat B, Mat C){ int k,l,temp; //C = new Mat(A.mu,A.nu,1); k = 1; l = 1; while(k<A.tu && l<B.tu){ if((A.data[k].row == B.data[l].row) && (A.data[k].col == B.data[l].col)){ temp = A.data[k].v + B.data[l].v; if(temp != 0){ C.data[C.tu].row = A.data[k].row; C.data[C.tu].col = A.data[k].col; C.data[C.tu].v = temp; C.tu++; } k++; l++; } if(( (A.data[k].row == B.data[l].row) && (A.data[k].col < B.data[l].col) ) || (A.data[k].row<B.data[l].row)){ C.data[C.tu].row = A.data[k].row; C.data[C.tu].col = A.data[k].col; C.data[C.tu].v = A.data[k].v; C.tu++; k++; } if(( (B.data[l].row == A.data[k].row) && (B.data[l].col < A.data[k].col) ) || (B.data[l].row<A.data[k].row)){ C.data[C.tu].row = B.data[l].row; C.data[C.tu].col = B.data[l].col; C.data[C.tu].v = B.data[l].v; C.tu++; l++; } } } }
相关文章推荐
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
- 利用稀疏矩阵的“三元组表”存储结构,实现两个矩阵的相加。
- 数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
- 数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
- 数据结构(java语言描述)顺序栈的使用(两个大数相加)
- 稀疏矩阵(三元组顺序表存储)6种操作的实现
- 给定n个矩阵{A1, A2, …,An},其中,Ai与Ai+1是可乘的,计算这n个矩阵的连乘积。从中找出一种乘次数最少的计算次序(矩阵连乘最优顺序Java语言实现
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- 稀疏矩阵的三元组表示的实现及应用(矩阵相加)
- 【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)
- (数据结构与算法分析 七)------优先队列中的二叉堆的实现( Java语言描述)
- 【数据结构】单链表的实现(Java语言描述)
- 数据结构(java语言描述)顺序栈的使用
- 第九周 项目3 稀疏矩阵的三元组表示的实现及应用(矩阵相加)
- (Java)单链表Java语言顺序结构实现(数据结构三)