Java实现稀疏矩阵的转置
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
private int data;//数值
public Triple() { super(); }
为了运算方便,矩阵的非零元
素的个数也同时存储。这种存 储的思想实现如下: 将三元组按行优先的顺序,同 一行中列号从小到大的规律排 列成一个线性表,称为三元组 表,采用顺序存储方法存储该
public Triple(int row, int
int copt[] = new int[pre_Transposition.getCol_num()]; copt[0] = 1; int num[] = new int[pre_Transposition.getCol_num()]; // 确定每列非零元素的个数 for (int i = 0; i < pre_Transposition.getCount(); i++) { num[pre_tripleList.get(i).getCol()]++; } // 确定每列第一个非零元素在转置后三元组中的位置 for (int i = 1; i < copt.length; i++) { copt[i] = copt[i - 1] + num[i - 1]; } Triple triple = new Triple(); for (int i = 0; i < pre_Transposition.getCount(); i++) { triple = pre_Transposition.getTripleList().get(i); //获得遍历的三元组元素在转置后三元组的位置 int index = copt[triple.getCol()]-1; mild[index]=new Triple(triple.getCol(), triple.getRow(), triple.getData()); //下一个位置 copt[triple.getCol()]++; } Collections.addAll(post_tripleList, mild); post_Transposition = new TSMatrix(post_tripleList, pre_Transposition.getCol_num(), pre_Transposition.getRow_num(), pre_Transposition.getCount()); return post_Transposition; }
public void setRow(int row) { this.row = row; } public int getCol() { return col; } public void setCol(int col) { this.col = col; } public int getData() { return data; }
转置算法代码展示:
普通转置
for (int i = 0; i < pre_Transposition.getCol_num(); i++) { // 扫描pre_Transposition三元组 // 2、将每个三元组中行列互调换 // 3、重排三元组之间的次序实现矩阵转置 for (int j = 0; j < pre_Transposition.getCount(); j++) { if (pre_tripleList.get(j).getCol() == i) { //实现转置 Triple triple = new Triple(i, pre_tripleList.get(j).getRow(), pre_tripleList.get(j).getData()); post_tripleList.add(triple); } } }
三、类的设计
public class Triple {
private int row;//行标 private int col;//列标
public int getRow() { rΒιβλιοθήκη Baiduturn row;
“Trituple”类:
1.【逻辑结构与存储结构】
逻辑结构:线性结构。 存储结构:顺序存储结构
}
col, int data) { super();
this.row = row;
this.col = col; this.data = data; }
}
表。
public void setData(int data) {
this.data = data; }
输出结果:
阵的三元组。将大大虽短时间复杂度。因此在进行
转置之前,需要先确定原有矩阵每列非零元素的个 数和每列第一个非零元素在转置后矩阵三元组的位
组 进行转置.
时间复杂度: O ( col_num*count ) 矩阵列数与非零元素个数的乘积
置。设:cpot[col] 为原有矩阵第 col列第一个非零元
素在转置后三元组的位置; num[col] 为原有矩阵第col列中非零元素的个数;则 一定满足: cpot[1]=1; cpot[col]=cpot[col1]+num[col-1];
算法一:(普通转置)
1、将矩阵行列值互换 2、将每个三元组中行列互调换
算法二:(快速转置)
思想: 假设:在实现转置之前,已经确定原有矩阵 每一列的第一个非零元素在转置后矩阵三元组的位 置,那么在遍历原有矩阵三元组便可得到转置后矩
3 、重排三元组之间的次序实现矩阵
转置 思想:按照原有矩阵的列序进行 转置。即扫描 pre_Transposition 三元
Java实现稀疏矩阵的转置
1.程序的功能: 三元组将稀疏矩阵的行号、列号和元素值作为三元组的三个元素进行存储, 该程序实现对稀疏矩阵的顺序存储,并可以对稀疏矩阵进行转置。 2、程序的特点
采用Java面向对象语言。创建三元组存放稀疏矩阵。结合Java语言的特点、
利用稀疏矩阵和三元组的存储特点,交换数组的行号和列号实现数组的转置。