用三元组存储稀疏矩阵及其快速转置

数据结构之稀疏矩阵三元组快速转置笔记详解 首先先说一些相关定义:(已经有相关定义认识的可以跳过1、2、3点) 1、稀疏矩阵: 定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵(sparse matrix),该比值称为这个矩阵的稠密度;与之相区别的是,如果非零元素的分布存... 阅读详情

用三元组存储稀疏矩阵及其快速转置

稀疏矩阵的三元组存储方式

稀疏矩阵可以用一个三元组数组表示,数组每个元素是一个三元组,三元组形式为
(矩阵行号,矩阵列号,元素值)
三元组个数,即数组长度,为稀疏矩阵的非零元素个数。
三元组元素按照行号递增,列号递增的方式排序。
例如矩阵M:
[ 1 0 0 0 0 0 0 2 0 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 2 & 0 \end{bmatrix} ⎣⎡​100​002​000​⎦⎤​
对应的的三元组数组为:
(0,0,1)
(2,1,2)

快速转置算法

输入:原矩阵A的三元组数组
输出:原矩阵的转置矩阵B的三元组数组

转置相当于把A的三元组数组每个元素的行列交换,然后按照列递增,行递增的顺序重排,从而算法类似于桶排序,将列相同的三元组按它们在A矩阵的三元组数组中的先后顺序放到同一个桶中,所有桶按列号从小到大排。从而需要两个大小均为矩阵A列数的数组row_size和row_start,row_size记录每个桶的大小,row_start记录每个桶下一个存进来的元素在B矩阵的三元组数组中的下标,每在桶中放入一个元素,下标自增以存放下一个元素。
例如矩阵M:
[ 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 4 5 0 ] \begin{bmatrix} 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 3 & 0 & 0 & 0 \\ 0 & 0 & 4 & 5 & 0 \end{bmatrix} ⎣⎢⎢⎢⎢⎡​10000​00030​00004​02005​00000​⎦⎥⎥⎥⎥⎤​
对应的三元组数组变为其转置矩阵的三元组数组:
在这里插入图片描述
row_size数组为{1,1,1,2,0},初始的row_start数组为{0,1,2,3,5}
列数相同则颜色相同,一个颜色即为一个“桶”,也就是转置矩阵一行的所有非零元素,将每种颜色按列号从小到大排序,由于在原数组中就是按行号递增的顺序存放,所以同种颜色的三元组顺序保持不变。

预先定义两个数组row_size, row_start分别存储B每行的非零元素个数和当前
非零元素在三元组数组中的下标,row_size数组所有元素初始化为0
elements_A: A的三元组数组
elements_B: B的三元组数组
col_num: A的列数,B的行数,也是桶的个数
// 统计每个桶的大小,即B每行非零元素个数
1、对elements_A中每个元素triple:
		row_size[triple.col]++
// 计算B每行非零元素在elements_B中的初始下标
2、对row_start数组中的第i(i从1到col_num-1)个元素:
		row_start[i] = row[start[i-1] + row_size[i-1]
// 遍历elements_A,将其放入elements_B中对应的桶中
3、对elements_A中的每个元素triple:
		// B中对应三元组就是把triple的行号列号交换,值不变
		elements_B[row_start[triple.col]].col = triple.row 
		elements_B[row_start[triple.col]].row = triple.col
		elements_B[row_start[triple.col]].value = triple.value
		// 桶中下一元素的下标
		row_start[triple.col]++

代码

实现代码在这里的sparse_matrix_transpose.cpp,其中头文件是myheaders文件夹中的sparse_matrix.transpose.h

稀疏矩阵的三元组表示----(算法详解) 稀疏矩阵的三元组表示----(优化程序),介绍稀疏矩阵的概念的基本算法,算法均有给出源码,源码均经过调试,并由详解。 阅读详情

相关推荐

稀疏矩阵的存储和获取(三元组顺序表存储方式 C++版)

稀疏矩阵如图所示,4行7列的矩阵一共28个元素,但是非零元素仅仅有5个。为了节省存储空间,实际上我们只需要存储这5个元素即可。 稀疏矩阵的存储一共有三种方式: 1.三元组顺序表方式存储。 2.行逻辑链接的顺序表。 3.十字链表法。 这篇是三元组顺序表方式存储的代码实现。 代码实现以及测试结果: #include<stdio.h> #include<stdlib.h> /* 稀疏矩阵的三元组顺序表存储方式 */ ...

weixin_42295110的博客 2661

(数据结构)C语言稀疏矩阵存储之三元组 —— 2022/3/25

稀疏矩阵的三元组—— 头文件结构体声明三元组结构体声明稀疏矩阵构造增添三元组元素的函数构造展示稀疏矩阵的函数—— 主函数 —— 头文件 #include <stdio.h> #define number 3 结构体声明三元组 // 结构体声明三元组节点 typedef struct { int i, j; int data; } triple; 结构体声明稀疏矩阵 // 结构体声明稀疏矩阵节点 typedef struct { triple data[number

weixin_51927215的博客 5792

稀疏矩阵A、B均采用三元组顺序表表示,验证实现矩阵A快速转置算法,并设计、验证矩阵A、B相加得到矩阵C的算法。

数据结构实验题目: 稀疏矩阵A、B均采用三元组顺序表表示,验证实现矩阵A快速转置算法,并设计、验证矩阵A、B相加得到矩阵C的算法。 (1)从键盘输入矩阵的行数和列数,随机生成稀疏矩阵。 (2) 设计算法将随机生成的稀疏矩阵转换成三元组顺序表形式存储。 (3) 设计算法将快速转置得到的与相加得到的三元组顺序表分别转换成矩阵形式。 (4) 输出随机生成的稀疏矩阵A、B及其三元组顺序表、快速转置得到的与...

槐殇雪的博客 6909

【数据结构】稀疏矩阵的压缩存储(三元组表、十字链表)(C语言)

目录1. 三元组表1.1 三元组表的存储结构1.2 基于三元组表的矩阵转置1.3 完整实现代码1.4 运行结果2. 十字链表2.1 十字链表的存储结构 稀疏矩阵是指矩阵中大多数元素为零的矩阵。从直观上讲,当非零元素个数低于总元素的30%时,这样的矩阵为稀疏矩阵。 1. 三元组表 1.1 三元组表的存储结构 稀疏矩阵的三元组表表示法是指只存储非零元素,同时存储该非零元素在矩阵中所处的行号和列号的位置信息。 为方便处理,将稀疏矩阵中非零元素对应的三元组按“行序为主序”的一维结构体数组进行存放,将矩阵的每一行(行

weixin_51450101的博客 1万+

对称矩阵的存储及转置算法

本文要点: 1.对称矩阵与稀疏矩阵 2.两种矩阵的压缩存储 3.代码实现两种矩阵 一、对称矩阵 1.对称矩阵也是一种N*N的特殊矩阵,并且满足Aij = Aji(设这个矩阵为A,并且有0 2.对称矩阵的压缩存储 如果把矩阵中的每个元素都存储起来,那么就会显得浪费空间,因为每两个关于对角线对称的元素相等,因此就可以将矩阵压缩存储到一个数组Array中,即:将对称的两个元素存一份

YANG 6681

稀疏矩阵的三元组存储及快速转置

【问题描述】 实现稀疏矩阵的三元组表存储和快速转置运算。 【输入形式】 输入一个整型的6阶稀疏矩阵。 【输出形式】 输出稀疏矩阵的三元组表形式,使用快速转置方法进行转置运算,输出辅助数组num和cpot的值及转置后的三元组表形式。

AIGC 2436

稀疏矩阵的存储方式及其快速转置的实现

稀疏矩阵: M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。 如下图矩阵: 稀疏矩阵的压缩存储方式: 压缩存储极少数的有效数据。使用{row,col,value}三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放(以便转置打印矩阵)。 稀疏矩阵的转置: (1)将存储的有效数据行优先存储改为按

dream 6214

基于mediapipe的动作捕捉和人物模型的驱动

我实习做这个的时候,当时也找了很多资料,但很多资料都没有讲透,下面我就总结一下自己结合看代码后的感悟,还有一些我认为很重要的点。

qq_58484580的博客 7702

c语言 三元组存储稀疏矩阵并转置

c语言定义一个 10*10 的稀疏矩阵,定义一个三元组结构,以行优先的形式存储上述矩阵,并实现: (1) 上述三元组存储的矩阵的转置 (2) 输出原始 10*10 矩阵及其三元组表示 (3) 输出转置后的 10*10 矩阵及其三元组表示...

LM306的博客 3407

从零搭建Python接口自动化测试框架:pytest+requests+Allure实战指南

接口自动化测试是现代软件工程中保障交付质量、提升测试效率的核心实践。其基本原理是通过脚本模拟客户端请求,对服务端接口进行自动化的功能验证、性能探测与回归测试,从而替代重复的手工操作。在技术实现上,Python凭借其简洁语法和丰富的生态,成为构建此类框架的主流选择,其中pytest测试框架、requests HTTP库和Allure报告工具构成了技术栈的黄金组合。这套技术方案的价值在于,它能将测试用例数据(如YAML文件)与执行逻辑分离,实现数据驱动测试,并通过持续集成(如Jenkins)无缝融入DevOps

weixin_31822733的博客 378

FineReport SQL查询分页

打开模板>模板web属性>分页预览设置,选择为该模板单独设置,将默认的工具栏按钮全部清除掉,然后依次添加两个自定义按钮,一个邮件按钮,两个自定义按钮,一个Word格式,一个PDF按钮。如下所示:注:使用具体格式按钮,如邮件、Word格式、PDF按钮是为了JS直接使用控件名称获取空间方便修改其内容;

lep的博客 2428

5.3矩阵的压缩存储(稀疏矩阵转置和快速转置)

5.3矩阵的压缩存储(稀疏矩阵转置和快速转置)

IT1995的博客 3万+

从按键开机到I2C隔离:手把手拆解一个智能硬件项目里的MOS管实战配置

本文详细解析了智能硬件项目中MOS管的实战配置,从按键开机电路到I2C总线隔离,全面覆盖电源管理和信号隔离的关键技术。通过PMOS+NMOS组合方案实现可靠的开机功能,并采用双NMOS方案优化I2C通信隔离,提升系统稳定性和信号质量。

weixin_28691741的博客 326

5.3.2 稀疏矩阵及其三元组结构

稀疏矩阵的三元组存储结构 #define MAXSIZE 12500 //设置非零元个数最大值为12500 typedef struct { int i, j; //该非零元的行下标和列下标 ElemType e; //三元组的元素值 }Triple; //三元组的一个元素 typedef struct { //非零元三元组表,data[0]未用 Triple data[MAXSIZE + 1]; //该稀疏矩阵的行数,列数,非零元个数 int mu, nu,.

engineer0的博客 997

先进半导体材料与器件Chapter3

Chapter3 异质结双极晶体管(HBT) 作者:毛茏玮 / Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/5458277467/profile?topnav=1&wvr=6&is_all=1 GitHub:github.com/saint-000 知乎:https:/...

一个会写代码的烤鸭 5803

Ollama 在不同操作系统上的详细使用,及用python进行调用实战

本文介绍了Ollama的安装配置及Python调用方法。主要内容包括:1)Windows/macOS/Linux/Docker等多种安装方式;2)Ollama基础命令,涵盖模型管理、运行和服务控制;3)Python调用教程,包含官方库使用、自定义客户端、多轮对话、参数设置等高级功能,以及直接API调用示例。文章提供了完整的代码片段,适合开发者快速上手使用Ollama进行本地大模型部署和开发。

数据知道的博客 1233

数据结构——稀疏矩阵的转置

一.稀疏矩阵和其压缩存储 1.稀疏矩阵: 设m行n列的矩阵含t个非零元素,定义δ=t/(m*n)为稀疏因子,则稀疏因子小于等于0.05 的矩阵为稀疏矩阵。 2.稀疏矩阵的压缩存储: 稀疏矩阵中存在多个非零元素,且非零元素位置无规律,非零元的行下标,列下标,值以三元组( i,j,aij )形式来存储 稀疏矩阵由所有非0元的三元组所构成的线性表(三元组表)、矩阵的行数及列数唯一确定 二.稀疏矩阵的定义...

yulingzheng的博客 4742

【OpenClaw企业级智能体实战】第32篇:政企版OpenClaw安全落地指南——奇安信55页报告深度拆解与实战

2026年Q2,OpenClaw(俗称“龙虾”)安全风险集中爆发,公安部、工信部等监管机构密集发声,23万公网暴露实例、155个高危漏洞让企业“养虾”安全压力骤增。奇安信发布的55页《政企版龙虾安全使用指南》,以“看得清、管得住、用得好”为核心,构建了“端-网-云”三层防护体系。本文深度拆解这份报告的九大安全面与三大趋势,全景扫描奇安信、腾讯、360等头部厂商安全方案,提炼企业最低安全基线与实操配置,通过金融机构虚拟案例演示落地全流程,提供从资产摸底、规范制定到工具部署的完整解决方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 572

稀疏矩阵的压缩存储与转置

稀疏矩阵:矩阵中大多数元素为0的矩阵(本文以行序为主序)稀疏矩阵的三元组表述法:        650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/7E/E1/wKioL1cLsP7QRQIfAAAHqmH0VZY633.png" title="dsg题.png" alt="wKioL1cLsP7QRQIfAAAHqmH0VZY633

fucangzxx的博客 621

智能车图像处理19-进阶篇11--斜入十字补线

这篇文章主要讲述智能车竞赛中如何对于斜入十字进行补线操作。

taiyuezyh的博客 7482

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

稀疏矩阵的转置

稀疏矩阵:M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律如下图所示:650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/7F/F4/wKioL1cy2Eni9GIzAAAVBBaVJqE589.png" title="Image%20[1].png" alt="wKioL1cy2Eni9GIzAAAVBB

csdnldsg的博客 577

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

稀疏矩阵(实现快速转置和普通转置)

1.M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。 2.稀疏矩阵的压缩存储: 压缩存储值存储极少数的有效数据。使用{row,col,value}三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放。  3.矩阵的转置: 将原矩阵的行、列对换,也就是将[i][j]和[j][i]位置上的数据对换。(转置有快速转置和普通转置)

qingcunsuiyue的博客 1589

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

对称矩阵和稀疏矩阵的压缩和转置

对称矩阵:N*N方阵A,特点Aij=Aji,对角线分割为上三角和下三角,压缩存储只需存储下三角数据。 稀疏矩阵:矩阵中有效数据很少,在存储时只存储有效数据,非法数据不存,在实现中创建一个结构体表示一个有效数据,并以行优先级先后顺序依次存放,并对稀疏矩阵实现转置和快速转置。 代码实现: #include #include #include #include using namespac

L_XRUI的博客 1250

稀疏矩阵

定义: M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。 具体实现代码: 1、定义一个三元组 因为要分布没有规律,所以用一个三元组来保存坐标与值之间的关系 代码如下: template struct Triple { public: Triple(int row=0,int col=0,const T& value=T()) :_row(row)

Everlasting2016的博客 806

稀疏矩阵的压缩存储和快速逆置

稀疏矩阵啊,就是矩阵中的有效元素很稀疏,稀疏到什么程度呢?通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵(sparse matrix)。我们想,一少部分的有效元素就占用大部分的地址空间,是不是很浪费,那么我们就要想办法让其不浪费那么多,就是压缩存储。之前我们写过对称矩阵的压缩,那是因为对称矩阵的分布很有规律,但是再看一眼稀疏矩阵,除了有效元素少一点,也没

jhcconan614的博客 920

35、矩阵(稀疏矩阵)的压缩存储(一)

为了节省存储空间并且加快处理速度,需要对这类矩阵进行压缩存储,压缩存储的原则是:不重复存储相同元素;不存储零值元素。 一、相关概念 ㈠特殊矩阵:矩阵中存在大多数值相同的元,或非0元,且在矩阵中的分布有一定规律。 ⒈对称矩阵:矩阵中的元素满足 aij=aji1≤i,j≤n ⒉三角矩阵:上(下)三角矩阵指矩阵的下(上)三角(不包括对角线)中的元素...

hopegrace的博客 1391
下一篇: kmp算法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值