×

稀疏矩阵的转置算法

稀疏矩阵的转置算法(稀疏矩阵的转置算法程序)

admin admin 发表于2023-08-05 08:55:16 浏览33 评论0

抢沙发发表评论

本文目录

稀疏矩阵的转置算法程序

template《class T》SparseMatrix《T》 SparseMatrix《T》::Transpose(){ SpareseMatrix《T》 b(); b.Rows=Cols; b.Cols=Rows; b.Trems=Terms; if(Terms》0) { int i,k,CurrentB=0; for(k=0;k《col;k++) { for(i=0;i《Terms;i++) { if(smArray.value; CurrentB++; } } } } return b;}

求稀疏矩阵快速转置算法及代码

typedef struct{ int row ; /* 行下标 */int col ; /* 列下标 */elemtype value; /* 元素值 */}Triple ;typedef struct { int rn ; /* 行数 */int cn ; /* 列数 */int tn ; /* 非0元素个数 */Triple data ; /*至关重要!!当本列中 */ }}}

稀疏矩阵与转置算法

#include 《stdio.h》#include 《stdlib.h》typedef struct{        int row;        int col;        int data;}xishu;//存储稀疏矩阵的结构(行, 列,值)#define MAX_COL 10//static void transpose(xishu a, xishu b);//普通算法static void fasttranspose(xishu a, xishu b);//改进的算法static void create(int a, int m, int n, xishu b, int* count);static void print(int* count, xishu a);int main(int argc, char** argv){        int a = { {0, 0, 0, 22, 0, -1}, {0, 71, 0, 0, 0, 0}, {0, 0, 0, 88, 0, 0},                                                {0, 0, -9, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 7} };        xishu b, c;        int count = 0, i, k;        for(i = 0; i 《 10; i++){                b.data;        }}

稀疏矩阵三元组表示以及转置

visual studio下编译通过,测试结果正确,万一VC6编译不过请用TC2.0//稀疏矩阵就是只记录非零元的位置和值,适合处理0比较多的矩阵#include 《stdio.h》#include 《malloc.h》#define MAXSIZE 10typedef struct node{ int i,j,value; //i为行下标,j为列下标,value为该处的值}NODE;typedef struct mat{ int mv,mc,mt; //mv为行数,mc为列数,mt为非零元个数 NODE v.value; q++; } } }}void main(){ MAT *a,*b; b=(MAT *)malloc(sizeof(MAT)); a=(MAT *)malloc(sizeof(MAT)); init(a); view(a); change(a,b); view(b);}

稀疏矩阵的转置运算用C语言

#include 《stdio.h》#include 《stdlib.h》#define OK 1#define MAXSIZE 12500 //非零元个数最大值typedef int Status;typedef int ElemType;typedef struct{ int i,j; //非零元的行下标和列下标 ElemType e;}Triple;typedef struct{ Triple data.e); return 0; } /*请输入矩阵的非零元个数,矩阵的行数和列数:8 6 6请输入第1个非零元的行坐标,列坐标,值:1 2 12请输入第2个非零元的行坐标,列坐标,值:1 3 9请输入第3个非零元的行坐标,列坐标,值:3 1 -3请输入第4个非零元的行坐标,列坐标,值:3 6 14请输入第5个非零元的行坐标,列坐标,值:4 3 24请输入第6个非零元的行坐标,列坐标,值:5 2 18请输入第7个非零元的行坐标,列坐标,值:6 1 15请输入第8个非零元的行坐标,列坐标,值:6 4 -7原矩阵为: i j e 1 2 12 1 3 9 3 1 -3 3 6 14 4 3 24 5 2 18 6 1 15 6 4 -7转置矩阵为: i j e 1 3 -3 1 6 15 2 1 12 2 5 18 3 1 9 3 4 24 4 6 -7 6 3 14Press any key to continue*/中间采用了两种转置算法,VC6下调试皆可通过

稀疏矩阵的转置

首先说稀疏矩阵的存储,可以用__int64 Key = (行《《32) + (列) 作为索引,使用 STL库的 map 存储。转置就是对Key的交换了,很简单!下面的例子:(GCC编译成功,MSVC的应该也可以,只是 __int64_t 变成__int64)#include 《map》#include 《stdio.h》#include 《vector》#include 《stdlib.h》using namespace std;class hashmap_mat{ private: map《unsigned __int64_t, double》 map_mat; double m_idle_val; public: hashmap_mat(double idle_val = 0) :m_idle_val(idle_val) {} ~hashmap_mat(){map_mat.clear();} public: double operator () (unsigned int m,unsigned int n) { __int64_t key = (unsigned __int64_t)(((unsigned __int64_t)m)《《32)+n; if (map_mat.find(key)==map_mat.end()) return m_idle_val; return map_mat; }};int main(){ //make a mat 20 * 20, has 1 elements nonzero hashmap_mat mat(0); //insert 3 items mat.setVal(rand()%10,rand()%10,rand()%100/100.0); mat.setVal(rand()%10,rand()%10,rand()%100/100.0); mat.setVal(rand()%10,rand()%10,rand()%100/100.0); printf(“Raw Matrix:\n“); for (int i=0;i《10;i++) { for (int j=0;j《10;j++) printf(“%3.2lf “,mat(i,j)); printf(“\n“); } //swap mat.SwapT(); printf(“Swapped Matrix:\n“); for (int i=0;i《10;i++) { for (int j=0;j《10;j++) printf(“%3.2lf “,mat(i,j)); printf(“\n“); } return 0;}

稀疏矩阵的转置算法有什么用

稀疏矩阵是某个固定值元素比较多的矩阵,使用三元组存储是为了减少存储该矩阵的存储空间,而其转置算法就是为了解决矩阵的基本转制功能。这个涉及线性数学,如果您对转置有什么需要了解的可以看看。矩阵可以解决很多的多项式问题,同时也是对图的一种描述方法,因此其转置功能作为矩阵的基本特性也就很重要。

稀疏矩阵的转置 要求1)以三元组的方式存储稀疏矩阵 2)普通转置方法实现 3)快速转置方法实现

//普通转置算法//时间复杂度:O(t*m);t是非零元个数,m是列数。每转置一列需要扫描全部三元数组#include “stdafx.h“#include 《iostream》struct element{int value;int i,j;};struct matrix{int c,v,t;struct element *data;};int main(int argc, char* argv){ int m,n,t; int i,j,d; int index; matrix *mt,*lm;//lm是转置后的矩阵 element *e; //原是矩阵的输入 printf(“输入矩阵的行数,列数,非零元个数n“); scanf(“%d%d%d“,&m,&n,&t); mt=new matrix; mt-》c=m; mt-》v=n; mt-》t=t; mt-》data=new element.value); index++; } return 0;}