三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
来源:互联网 发布:谷歌退出中国 知乎 编辑:程序博客网 时间:2024/05/18 11:17
不用十字链表也可以稀疏矩阵相加时间复杂度最坏情况达到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++;}}}}
0 0
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 利用稀疏矩阵的“三元组表”存储结构,实现两个矩阵的相加。
- 数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
- 稀疏矩阵的三元组行逻辑链接的顺序表存储结构表示及实现
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
- 稀疏矩阵的三元组顺序表存储结构表示及实现
- 稀疏矩阵的三元组顺序表的C语言实现
- 稀疏矩阵(三元组顺序表实现)
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- 稀疏矩阵的三元组表示的实现及应用(矩阵相加)
- 稀疏矩阵 三元组顺序表
- 稀疏矩阵 三元组顺序存储
- 稀疏矩阵的三元组顺序存储
- 稀疏矩阵三元组顺序表
- 稀疏矩阵-----三元组顺序表
- 数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
- 黑马程序员————单例设计模式、线程间的通信等等
- 内部类
- 二分图匹配 Hdu1150
- nagios插件之监控AES日志文件--检查ERROR
- 自己动手写CPU之第九阶段(4)——加载存储指令实现思路
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- YII显示sql进行调试
- Android中自定义布局无法在xml中使用的问题
- Java基础知识1:了解Java,安装JDK
- ArrayList与LinkedList的简单比较
- HDU 1018-Big Number(数学)
- Android--书籍翻页效果
- Exception in thread "main" java.lang.IllegalArgumentException
- self.window.rootViewController都干了些啥事?