一。问题描述

将一个稀疏矩阵,用三元组的方式压缩存储,然后实现其快速转置

二、实验源码

#include

#include

#define Size 100

typedef struct

{

int i,j;//i表示行,j表示列;

int elem;//矩阵元素

}triple;

typedef struct

{

triple data[Size];//非零元三元组,data[0]不使用

int i_sum;//矩阵行数

int j_sum;//矩阵列数

int count;//矩阵非零元个数

}Tsmatrix;

//用三元组结构存储一个稀疏矩阵

Tsmatrix  Init_Tsmatrix()

{

Tsmatrix T;//定义一个稀疏矩阵变量

printf("请依次输入矩阵的行数、列数、非零元总个数:\n");

scanf("%d%d%d",&T.i_sum,&T.j_sum,&T.count);

if(!T.i_sum||!T.i_sum||!T.count)

{

printf("矩阵为空\n");

exit(0);

}

else

{

printf("请依次输入矩阵非零元的行下标、列下标、非零元值:\n");

for(int k=1;k<=T.count;k++)

scanf("%d%d%d",&T.data[k].i,&T.data[k].j,&T.data[k].elem);

return T;

}

}

//输出压缩存储的矩阵

void Show_Tsmatrix(Tsmatrix T)

{

if(T.count==0)

return;

else

{

printf("行标\t列标\t元素值\n");

for(int k=1;k<=T.count;k++)

printf("%d\t%d\t%d\n",T.data[k].i,T.data[k].j,T.data[k].elem);

}

}

//矩阵转置时间复杂度O(T.i_sum*T.count)算法

Tsmatrix matrix_transpose(Tsmatrix T)

{

Tsmatrix S;

S.i_sum=T.j_sum;//行列互换

S.j_sum=T.i_sum;

S.count=T.count;//非零元个数不变

int k=1,m,n;//k非零元下标,m:行下标

if(T.count)

for(m=1;m<=T.i_sum;m++)//因为行标有序,转置

for(n=1;n<=T.count;n++)//遍历三元组表

if(T.data[n].j==m)

{//列标等于行标,转置后,行标有序

S.data[k].i=T.data[n].j;

S.data[k].j=T.data[n].i;

S.data[k].elem=T.data[n].elem;

k++;//下标加一

}

return S;

}

//矩阵快速转置算法

Tsmatrix matrixtranspose_quick(Tsmatrix T)

{

Tsmatrix V;

int col,q,p;

int *num;

num=(int

*)malloc(sizeof(int)*(T.j_sum+1));//保存矩阵每一列非零元个数

int *position;

position=(int

*)malloc(sizeof(int)*(T.j_sum+1));//保存矩阵每列第一个非零元素所在位置

V.i_sum=T.j_sum;//行列互换

V.j_sum=T.i_sum;

V.count=T.count;//非零元个数不变

if(T.count)

{

for(col=1;col<=T.j_sum;col++)

num[col]=0;//初始化

for(int t=1;t<=T.count;t++)

++num[T.data[t].j];//求矩阵每一列非零元个数

position[1]=1;

for( col=2;col<=T.j_sum;col++)

position[col]=position[col-1]+num[col-1];//求矩阵每列第一个非零元素在转置矩阵三元组所在位置

for( p=1;p<=T.count;p++)

{

col=T.data[p].j;//col保存列号

q=position[col];//根据列号找到要存放的位置

//把相应值拷贝到q对应的位置

V.data[q].i=T.data[p].j;

V.data[q].j=T.data[p].i;

V.data[q].elem=T.data[p].elem;

position[col]++;//值已存入,位置值自增

}

}

return V;

}

void main ()

{

Tsmatrix T,T1,T2;//T1,T2两种方法调用

T=Init_Tsmatrix();

printf("\n稀疏矩阵压缩存储后如下:\n");

Show_Tsmatrix(T);

T1=matrix_transpose(T);//一般算法

printf("\n稀疏矩阵压缩转置后如下:\n");

Show_Tsmatrix(T1);

T2=matrixtranspose_quick(T);//快速转置算法

printf("\n稀疏矩阵压缩使用快速转置后如下:\n");

Show_Tsmatrix(T2);

}

java三元组的快速转置_矩阵压缩——三元组以及矩阵快速转置程序实现相关推荐

  1. c++矩阵转置_线性代数中的向量矩阵

    目录 前言 符号约定 向量的基本性质 [定义,基向量,线性相关/无关*,向量点积] 矩阵的基本性质 [转置,广播,线性变换] 矩阵基本运算 [矩阵相乘,矩阵点积] 行列式 [概念,性质,右手法则,行列 ...

  2. java csv快速解析_爸爸解析:闪电般的快速CSV解析体验

    java csv快速解析 总览 (Overview) With a plethora of options to parse CSV files/data and adding to it the i ...

  3. python中矩阵的转置_[转]Python中的矩阵转置

    Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...

  4. python矩阵的共轭转置_基础 | Python 下的矩阵操作

    关键词:线性代数 / 矩阵 / 运算 今天小编将详细介绍矩阵的运算规则与数学符号应用在矩阵上的含义,如同算数字的加减法需要了解计算公式的规则一样,矩阵的运算虽然与单纯数字运算相似,但其细节的相异处还需 ...

  5. java php python 高并发_关于php如何调用Python快速发送高并发邮件的示例代码

    1 简介 在PHP中发送邮件,通常都是封装一个php的smtp邮件类来发送邮件.但是PHP底层的socket编程相对于python来说效率是非常低的.CleverCode同时写过用python写的爬虫 ...

  6. java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口

    写在前面的话 这篇文章计划是在过年期间完成的,示例代码都写好了,结果亲戚来我家做客,文章没来得及写.已经很久没有更新文章了,小伙伴们,有没有想我啊.言归正传,下面开始,今天的话题. 目标 写一套符合规 ...

  7. java byte 二维数组_[编程入门]二维数组的转置-题解(Java代码)

    解题思路: 注意事项: 参考代码:import java.util.Scanner; public class Main { public static void main(String[] args ...

  8. java投票排名怎么弄_微信投票中,怎样快速投票把排名提上去呢?

    随着微信活跃用户的增多,成为继QQ之后又一著名日常社交软件,微信上的各种活动的种类也越来越丰富,举办次数也越来越频繁.除了朋友圈里的微商以外,相信许多人对微信第二深刻的互动就是各种点赞和投票了.时不时 ...

  9. java 二维数组对角线_二维数组(矩阵)对角线输出

    今天在BBS里面看到这样的面试题目, 1,二维数组(N*N),沿对角线方向,从右上角打印到左下角如N=4: 4*4二维数组 { 1 2 3 4 } { 5 6 7 8 } { 9 10 11 12 } ...

最新文章

  1. CentOS 7如何设置Linux开机自动获取IP地址
  2. 深度学习:神经网络,softmax + cross entropy,非tensorflow方式
  3. 15.profile-api
  4. 安装ORACLE 11。2.0.3 配置GRID执行脚本信息记录
  5. 这款电脑升降桌美到我了
  6. Java SimpleTimeZone setEndRule()方法与示例
  7. 二级数据库access和mysql_二级数据库access和mysql
  8. Codeforces Round #328 (Div. 2)D. Super M 虚树直径
  9. C51单片机,点亮小灯的入门级教程
  10. HTML链接和锚点学习---第四天
  11. [学习报告]《LeetCode零基础指南》(第五讲) 指针-gyro
  12. 一个留学中介的CRM案例
  13. Android AGP 7.0 适配,开始强制 JDK 11
  14. 计算机桌面图标有双影,win7图标重影怎么办_win7电脑桌面图标有重影如何解决
  15. QBitmap 单色图片
  16. go 操作 kafka 实现发送和订阅
  17. 百度api文字转语音效果
  18. Centos7 glibc库升级到2.23
  19. jQuery实现轮播(jQuery究竟有多好用)
  20. 公租房摇号系统功能测试用例设计

热门文章

  1. Django讲课笔记03:创建Django项目
  2. Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能
  3. Moodle安装步骤
  4. linux监测文件输出命令,Linux-USB-检测枚举-1  lsusb输出内容详细解读
  5. oracle date引入哪个包,oracle 索引字段包含date类型,使用spring jdbc更新时不走索引,而是走table access full的问题...
  6. bzoj4415 [Shoi2013]发牌 线段树
  7. 【英语学习】【医学】Unit 09 The Respiratory System
  8. Coursera Machine Leaning 课程总结
  9. 蒙特卡洛积分(Monte Carlo Integration)应用:利用蒙特卡洛积分生成 McBeth表
  10. 加快linux编译速度,Linux Makefile 编译速度的优化【转】