最新要闻
- RTX 4070笔记本挤牙膏?只比RTX 3070快了11%
- 天天热资讯!史上第25个!浙江彩民69元中2.4亿元巨奖 网友调侃:又骗我买彩票
- 全球热讯:不能“回血”了!微软大作《红霞岛》实体版仅提供激活码
- 0反式脂肪酸!旺旺邦德轻乳咖啡官方清仓:9瓶1盒仅19.9元
- 目标基辅号
- 环球观点:鹡鸰女神第2集-鹡鸰女神无修版
- 环球新动态:雷军宣布小米参加MWC 2023大会!铁大、铁蛋机器人海外亮相
- 上海一特斯拉再现失控事故:成道路护栏“终结者”
- 全球实时:插混和增程路线谁更好?院士欧阳明高给出答案
- 上海中环内圈发生单车事故 官方通报:车辆起火翻滚地面 驾驶员死亡
- 全球新资讯:ChatGPT大火 马斯克批OpenAI违背初心:被微软控制 只顾赚钱
- 贵南高铁全线静态验收:时速350公里 南宁到贵阳时间缩短一半
- 世界观热点:蹲夜叉还有意外收获?变异蝴蝶直接就往脸上刷啊!
- 今日热讯:暴雪宣布《暗黑4》新雕像
- 43年的友情!马云低调现身墨尔本 与昔日好友相见
- 每日视点!男子将比亚迪海豚改装称房车:车内洗澡、看电影、吃火锅
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【快播报】[数据结构] 稀疏矩阵的转置与快速转置
稀疏矩阵
稀疏矩阵的定义
在矩阵中,若数值为 0 的元素数目远远多于非 0 元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。
【资料图】
假设在 m * n的矩阵中,有 t个非 0 元素,令 δ = t / (m * n),则 δ为矩阵的稀疏因子。
稀疏矩阵的压缩存储
三元组表示法
稀疏矩阵由于非 0 元素很少,所以我们需要压缩存储矩阵。
我们只存储矩阵中的非零元。用 (i, j, e)来表示一个非零元,其中 i和 j表示非零元所在行和列,e表示非零元的值。稀疏矩阵可以由表示非零元的三元组及其行列数唯一确定。
三元组表示示例
三元组表在存储非零元的时候,首先要按照行序顺序排列,如果行相同,那么需要按照列序顺序排列。
三元组表的基本结构
typedef int ElemType;typedef struct{ int i, j; ElemType e;}Triple;typedef struct{ Triple data[MAXSIZE]; int mu, nu, tu; //矩阵行数,列数和非0元个数}TSMatrix;
稀疏矩阵的转置
稀疏矩阵转置的基本概念
转置运算:一个 m * n的矩阵 M,其对应的转置矩阵是一个 n * m的矩阵 T,并且 T中的元素 T(i, j)与 B中的元素 M(j, i)对应相等。
我们需要将三元组的行列互换,要构造一个转置矩阵 T的三元组表,并且这个三元组表中的次序也要满足按照行为主序排列,按照列为次序排列。
由于 T中的行对应的是 M中的列,所以在转置过程中,我们需要顺序枚举每一列。
所以朴素的稀疏矩阵转置方法为:(1)顺序枚举每一列,在矩阵 M中查找处于该列的非零元三元组;(2)将该三元组行列互换放入矩阵 T的三元组表中。
稀疏矩阵转置的结果
稀疏矩阵转置代码
//稀疏矩阵转置 (适用于 tu << mu × nu 的情况)void TransposeSMatrix(TSMatrix M,TSMatrix &T){ T.mu = M.nu; //T行数等于原矩阵列数 T.nu = M.mu; //T列数等于原矩阵行数 T.tu = M.tu; if(!T.tu) return; int q = 1; //转置矩阵中三元组下标 for(int col = 1; col <= M.nu; ++col){ //枚举每一列 for(int p = 1; p <= M.tu; ++p){ //查找M中处于该列的非零元 if(M.data[p].j == col){ T.data[q].i = M.data[p].j; //互换行列 T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e; q++; } } }}
稀疏矩阵的快速转置
稀疏矩阵快速转置的基本思路
朴素的稀疏矩阵转置方法是比较低效的,枚举每一列时都要在原矩阵中的三元组表中扫描一遍,如果可以事先直到每一列的非零元在转置矩阵 T的三元组表中的对应序号,可以大大减小转置的时间复杂度。
我们可以定义一个数组 num[]来记录原矩阵 M中每一列非零元的个数, 同时再定义一个数组 cpot[]用来记录 M中每一列第一个非零元在 T中对应的位置。
在 T中我们将行列进行了互换,所以在 T中每一行的第一个非零元对应的是 M中每一列的第一个非零元。在三元组表中,我们需要按照行主序排列,所以我们要记录 M中每一列的非零元个数,来知道转置矩阵 T中每一行的非零元个数,将 M中同一列的非零元依次排在 T的三元组表的前面。
为了得到 M中每一列的第一个非零元在 T中对应的位置,我们可以得到如下的递推式:
从第二列开始每一列的第一个非零元位置等于前一列的第一个非零元位置加上前一列非零元的个数。当然第一列可能无非零元,所以 T中对应位置1有可能延续到后面的某一列中。
稀疏矩阵快速转置代码
//稀疏矩阵的快速转置算法int cpot[MAXSIZE + 1], num[MAXSIZE + 1]; //辅助数组 //cpot[col] 表示M中第col列第一个非0元在T.data中的位置//num[col] 表示M中第col列中非0元的个数void FastTransposeSMatrix(TSMatrix M, TSMatrix &T){ T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; if(!T.tu) return; for(int col = 1; col <= M.mu; col++) num[col] = 0; //初始化为0 for(int k = 1; k <= M.tu; k++) num[M.data[k].j]++; //记录M三元组表每一列列中非0元个数 cpot[1] = 1; //初始化第一个非0元的序号 for(int col = 2; col <= M.mu; col++) //求第col列中第一个非零元在T三元组表中的序号 cpot[col] = cpot[col - 1] + num[col - 1]; for(int p = 1; p <= M.tu; p++){ int col = M.data[p].j; //此时M对应三元组中的非0元的所在列 int q = cpot[col]; //q为当前非0元的应当放置的序号位置 T.data[q].i = M.data[p].j; T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e; cpot[col]++; //cpot[col]++,对应下一个此列中非0元的序号 //cpot[col]最后一直加到等于cpot[col + 1],第col列也就不会有更多的非0元了 }}
程序测试
完整程序
点击查看代码
#include #include #define MAXSIZE 10000typedef int ElemType;typedef struct{ int i, j; ElemType e;}Triple;typedef struct{ Triple data[MAXSIZE]; int mu, nu, tu; //矩阵行数,列数和非0元个数}TSMatrix;//输入稀疏矩阵数据void InPutM(TSMatrix &M){ printf("输入稀疏矩阵的 行数, 列数, 非0元个数 :\n"); scanf("%d %d %d", &M.mu, &M.nu, &M.tu); printf("输入矩阵非0元素的 所在行i, 所在列j, 值e:\n"); for(int k = 1; k <= M.tu; k++){ scanf("%d %d %d", &M.data[k].i, &M.data[k].j, &M.data[k].e); }}//打印稀疏矩阵三元组数据void PrintM(TSMatrix T){ printf(" %d %d %d\n", T.mu, T.nu, T.tu); printf(" ------------\n"); for(int k = 1; k <= T.tu; k++){ printf(" %d %d %d\n",T.data[k].i, T.data[k].j, T.data[k].e); }}//稀疏矩阵转置 (适用于 tu << mu × nu 的情况)void TransposeSMatrix(TSMatrix M,TSMatrix &T){ T.mu = M.nu; //T行数等于原矩阵列数 T.nu = M.mu; //T列数等于原矩阵行数 T.tu = M.tu; if(!T.tu) return; int q = 1; //从列数小的开始,一一对应赋值 for(int col = 1; col <= M.nu; ++col){ for(int p = 1; p <= M.tu; ++p){ if(M.data[p].j == col){ T.data[q].i = M.data[p].j; T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e; q++; } } }}//稀疏矩阵的快速转置算法int cpot[MAXSIZE + 1], num[MAXSIZE + 1]; //辅助数组 //cpot[col] 表示M中第col列第一个非0元在T.data中的位置//num[col] 表示M中第col列中非0元的个数void FastTransposeSMatrix(TSMatrix M, TSMatrix &T){ T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; if(!T.tu) return; for(int col = 1; col <= M.mu; col++) num[col] = 0; //初始化为0 for(int k = 1; k <= M.tu; k++) num[M.data[k].j]++; //记录M三元组表每一列列中非0元个数 cpot[1] = 1; //初始化第一个非0元的序号 for(int col = 2; col <= M.mu; col++) //求第col列中第一个非零元在T三元组表中的序号 cpot[col] = cpot[col - 1] + num[col - 1]; for(int p = 1; p <= M.tu; p++){ int col = M.data[p].j; //此时M对应三元组中的非0元的所在列 int q = cpot[col]; //q为当前非0元的应当放置的序号位置 T.data[q].i = M.data[p].j; T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e; cpot[col]++; //cpot[col]++,对应下一个此列中非0元的序号 //cpot[col]最后一直加到等于cpot[col + 1],第col列也就不会有更多的非0元了 }}int main(){ TSMatrix M, T, FT; printf("————稀疏矩阵转置测试————\n\n"); InPutM(M); printf("\n稀疏矩阵转置前三元组: \n"); PrintM(M); printf("\n稀疏矩阵转置结果: \n"); TransposeSMatrix(M, T); PrintM(T); printf("\n稀疏矩阵的快速转置结果: \n"); FastTransposeSMatrix(M, FT); PrintM(FT);}
测试结果
-
天天微动态丨关于Linux升级内核时报错-grub2-editenv: error: environment block too small.
先说一下本文的初始环境OS版本:RedHatEnterpriseLinuxrelease8 1(Ootpa)内核版本:4 18 0-425 10 1 el8_7 x86_64在运维
来源: 【快播报】[数据结构] 稀疏矩阵的转置与快速转置
天天微动态丨关于Linux升级内核时报错-grub2-editenv: error: environment block too small.
RTX 4070笔记本挤牙膏?只比RTX 3070快了11%
天天热资讯!史上第25个!浙江彩民69元中2.4亿元巨奖 网友调侃:又骗我买彩票
全球热讯:不能“回血”了!微软大作《红霞岛》实体版仅提供激活码
焦点报道:0X01 位运算笔记
P4171 满汉全席
0反式脂肪酸!旺旺邦德轻乳咖啡官方清仓:9瓶1盒仅19.9元
目标基辅号
环球观点:鹡鸰女神第2集-鹡鸰女神无修版
环球新动态:雷军宣布小米参加MWC 2023大会!铁大、铁蛋机器人海外亮相
【世界快播报】(数据库系统概论|王珊)第五章数据库完整性-第四、六、七节:约束命名子句、断言和触发器
上海一特斯拉再现失控事故:成道路护栏“终结者”
全球实时:插混和增程路线谁更好?院士欧阳明高给出答案
上海中环内圈发生单车事故 官方通报:车辆起火翻滚地面 驾驶员死亡
每日速讯:F - 树状数组 2【GDUT_22级寒假训练专题五】
全球新资讯:ChatGPT大火 马斯克批OpenAI违背初心:被微软控制 只顾赚钱
贵南高铁全线静态验收:时速350公里 南宁到贵阳时间缩短一半
速看:05-python运算符
【全球聚看点】字节二面:10Wqps超高流量系统,如何设计?
全球快看:动态规划解决最值、有多少方案之类问题
[奶奶看了都会]ChatGPT接入企业微信成为聊天机器人
世界观热点:蹲夜叉还有意外收获?变异蝴蝶直接就往脸上刷啊!
今日热讯:暴雪宣布《暗黑4》新雕像
43年的友情!马云低调现身墨尔本 与昔日好友相见
每日视点!男子将比亚迪海豚改装称房车:车内洗澡、看电影、吃火锅
全球热点!仿豆瓣发布-编辑框自适应高度,自动滚动定位到焦点输入
今日热门!(数据库系统概论|王珊)第五章数据库完整性-第一、二、三节:数据库三大完整性
精选!特斯拉前脸被完全撞烂 气囊没弹!车主:可以去维权吗?
当前聚焦:《地下城与勇士》大面积更改名称、美术素材 玩家喊话中消协:退钱
环球通讯!特斯拉创始人:自动驾驶是胡扯 汽车不应像iPhone
【天天新要闻】AMD、NV把显卡卖到万元 Intel成救星:下代能冲RTX 4080
手机预置软件影响用户体验 央媒揭秘幕后原因:厂商利益驱动
全球视点!苹果上新348元省电保护膜!网友:觉得贵的不是目标客户
读Java实战(第二版)笔记14_CompletableFuture及反应式编程背后的概念
如果我种一个橄榄核,它会长成一棵树吗?
天天即时:全球第10 三星Galaxy S23 Ultra相机DXO等分140:不敌小米11 Ultra
《塞尔达传说:王国之泪》日本最新海报曝光:腐朽大师剑现身
讯息:《生化危机4:重制版》硬件要求出炉:开光追 A卡很受伤
仰望银河背后 吉利是真着急了
散片就是这么来的?男子腰缠155片CPU入境被海关查获
【全球热闻】SpringBoot中统一API返回格式的两种方式
焦点消息!C#两个特殊的集合类StringCollection与StringDictionary
每日聚焦:03-数据类型
快播:期末复习——虚拟内存
速讯:04-数据类型转换
当前报道:安卓机皇!三星Galaxy S23 Ultra下周首销:价格对标iPhone 14 Pro Max
环球热讯:蜜雪冰城门店没关音响扰民一宿 客服:门店整改 向周围居民送冰淇淋致歉
RTX 40系移动平台性能测试出炉:RTX 4080与RTX 4090差距极小
世界新消息丨日本新生儿数量首次跌破80万 创有统计以来最低值:789万老人还在打零工
全球快播:iPhone 14最高降1600元 苹果经销商贴本卖机:谁还买安卓?
九型性格系统_0型血女生的性格
世界快资讯丨首届中国非遗保护年会开幕 四川非遗项目精彩亮相
简讯:超过年限要报废!老人用高压锅炖肉脸部被重伤
女子网购奶粉4个月吃剩半罐退货:被店家吐槽似乞丐
官方称《狂飙》拍摄地拍照收费算勒索: “刀哥”回应不是我 行为不可取
头条焦点:伸展树(Splay)详解
当前简讯:期末复习——内存管理
报道:django连接ubuntu22下的mysql8
打造自己的ChatGPT:逐字打印的流式处理
从矩阵的谱半径到神经网络梯度消失
当前速读:女子厨房接水时速热水龙头突然爆炸冒白烟:爆炸声堪比雷响
【天天时快讯】特斯拉Model 3追尾公交1死1伤 事故已影响销售:网友关心刹车问题
全球快资讯丨女子屋内湿度表1年数值不变 好奇拆下检查后无语:还以为是坏的
世界时讯:【JS】Pug调用自定义JS函数
头条:Java正则匹配域名白名单
曾经很火但消失了的APP!网友第一个想到的是”腾讯微博“
环球即时:女子入住网红酒店发现床垫有尿渍:满房一股味
防AI越界!微软将出手:把必应聊天回复限制在5条以内
天天热文:全球最高安全标准 我国自研华龙一号技术:太平岭核电预计2025年投产发电
天天热资讯!挑战全网最土的“公主下午茶” 让人看饿:网友感慨羞辱多少爱装腔作势人
【新要闻】组合数学_第1章_排列与组合
每日消息!称霸意甲的非洲新一代神锋,奥斯梅恩正在征服足坛
让NV对30系显卡降价不可能!厂商清仓RTX 3080:2年后价格重回首发价
全球观速讯丨《文明6》已玩腻 等了7年的《文明7》官宣:主管大换血
环球关注:tui.editor一款功能强大的markdown编辑器
热消息:关于python中将字典的所有key组成一个列表的方式
【环球报资讯】Cesium CallbackProperty(十五)
【世界独家】全天候显示能掉多少电?iOS 16.4告诉你
环球观速讯丨公司回应要求员工扫厕所:这是福利 每月有几十元奖励
焦点日报:冲击40亿有望!《流浪地球2》累计票房已超38亿
女子情人节翻垃圾桶捡到金链:最后被前主人要回 网友热议
全球速读:【算法训练营day48】LeetCode198. 打家劫舍 LeetCode213. 打家劫舍II LeetCode337. 打家劫舍III
GitHub 入门 与 2023年2月18日10:29:02
观天下!假的!马斯克否认修改算法推荐自己帐号 将追责说谎员工
环球微动态丨颠覆性创新 潍柴全球首发大功率SOFC燃料电池:研发花了20亿
环球新资讯:学习笔记——尚好房项目的数据库建表文件
VirtualBox 配置虚拟机 Host-only 和 Nat
世界百事通!win系统提示请插入多卷集的最后一张磁盘解决方法
第三章 计算机进行小数运算时出错的原因
全球聚焦:北江纺织:拟冲刺上交所IPO上市,预计募资4.22亿元,近年综合毛利率逐年下降
【环球速看料】五菱会玩!城市玩乐潮品SUV悦也“小书包”是块屏:可自定义内容
天天看点:打造名族品牌!杨元庆:联想核心生产制造还是立足中国
天天快播:[数据结构] AVL树
全球头条:超越GPS主导国内导航定位 北斗日定位量超3000亿次
焦点简讯:努比亚Z50 Ultra保护壳泄漏:后置摄像模组巨大无比
全球快看:院士称我国已经具备ChatGPT算力基础 关键在如何爆发
全球新消息丨工作至死:日本789万老人还在打零工
资讯:菲律宾一飞机早上起飞后失联:近期第二起
(数据库系统概论|王珊)第四章数据库安全性:习题