顺序三元组 java_三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
不用十字鏈表也可以稀疏矩陣相加時間復雜度最壞情況達到O(tuA + tuB);思路比較簡單就不贅述了,代碼如下:
三元組:
package 行邏輯鏈接的順序表實現稀疏矩陣的相乘;
public class Triple {
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 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
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
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
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中文件复制
- 下一篇: lnmp的编译安装mysql_LNMP环