【数据结构课设】稀疏矩阵的三元组存储和转置 C语言

C++实现稀疏矩阵的操作,三元组存储---数据结构 顺序存储结构来表示三元组表,则可以的稀疏矩阵的一种压缩形式。三元组表又称有序的双下标法,它的特点是,非零元素在表中有序存储,因此便于进行依行顺序处理矩阵运算。 1.需求分析: (1) 输入的形式和输入值的范围:无需自己输入数据,程序是可以自动生成一个稀疏矩阵并输出在界面中。 (2)输出的形式:建立成功后会将三元组表中的数据按照每个元素所在的行号,列号输出元素值;稀疏矩阵的加法则基于三元组表,将两个三元组表的元素进行合并成一个三元组表,然后按照合成的三元组表输出稀疏矩阵信息。 (3) 程序所能达到的功能: 1 阅读详情

注:着急想要源代码的请自取哦,项目地址在https://github.com/littlewith/Matrix-transpose
个人主页:https://littlewith.top
博客:https://littlewith.github.io

程序设计:

1.1 课程设计课题:
利用稀疏矩阵的三元组表示法求其转置矩阵,并输出转置后的矩阵和其三元组的表示。(限一人完成)
1.2 课程设计程序需求分析:
(1)需要有菜单引导用户进行操作,用户可以根据菜单的显示选择相应的操作。
(2)用户可以根据自己的需求输入任意一个稀疏矩阵,输入的矩阵通过程序转换为三元组的存储方式。
(3)在程序进行处理时,可以使用快速矩阵转置的算法对矩阵进行转置,也可以使用普通的转置算法进行
转置。
(4)可以输出矩阵,包括查看转置前的矩阵、转置后的矩阵。
2.1 存储结构设计
稀疏稀疏矩阵是指在矩阵中含 0 元素占比特别多的矩阵,存储稀疏矩阵一般采用三元组来进行表示。可以采用两种数据结构来进行存储。一种是结构体变量,主要用于存储单个非零元素的值,包含该非零元素所在的行数、列数、以及该元素的值。令定义一个新的结构体以该结构体数组为成员,用于创建整个矩阵的数据,包含了该矩阵的行数、列数、非零元素的个数,从而能够将一个稀疏矩阵内的数据统一成一个整体。

2.2.1 菜单模块:int Menu();
这个模块的主要功能是进行程序的界面进行打印和提示。通过输出相应的字符来提醒用户来进行相应的操作,同时也能对用户的错误输入进行相应的提示,指导用户进行重新输入。该函数会根据用户的选择来返回相应的返回值,以便于控制器中进行相应的操作。
2.2.2 初始化稀疏矩阵模块:int init(Triple s);
这个模块的主要功能是对程序中的矩阵进行初始化操作,用于将分配好内存的矩阵中的行和列均初始化为 0,从而便于进行下一步赋值等操作。
2.2.3 创建矩阵模块:int create(TSmatrix b);
这个模块的主要功能是进行矩阵的录入操作,让用户按照三元组的存储方式实现矩阵的录入操作。被录入的矩阵数据会被存入到内存中进行等待相应的处理。
2.2.4 展示矩阵模块:void display(TSmatrix
b);
这个模块的主要功能是打印当前内存中存储的矩阵,虽然矩阵是按照三元组的方式存储的,但是这个函数会按照一般的规则将矩阵完整地打印出来,以便于用户更直观地查看到矩阵的内容。
2.2.5 转置方式选择模块:int chooseMethods();
这个模块的主要功能是引导用户选择相应的转置方式。程序内置了两种转置的方式,分别是快速转置方式和普通转置方式,用户根据控制台上输出的提示信息选择对应的转置方式对矩阵进行操作。该函数会根据用户所选的选项返回相应的值,以便于在控制器中进行操作。
2.2.6 普通方式转置模块:void TransposetMatrix(TSmatrix a,TSmatrix
b);
这个模块的主要功能是用于以普通的方式来转置存储在内存中的矩阵,并且将转置后的矩阵以 b 的指针进行返回。
2.2.7 快速方式转置模块:void fastTrans(TSmatrix a,TSmatrix*b);
这个模块主要功能是用于以快速转置的方式来转置存储在内存中的矩阵,并且将转置后的矩阵以 b 的指针进行返回。
2.2.8 控制器(主函数):
主函数的功能是对各个模块的作用进行协调,负责初始化矩阵,分配内存,触发相应的功能等,是程序的主要运行入点。

程序源代码如下所示:

#include<stdio.h>
#include<Windows.h>

#define MAXSIZE 1000
typedef int elemType;

//定义单个非零元素类型
typedef struct {
	int row;//定义行下标
	int col;//定义列下标
	elemType elem;//定义具体的值
} Triple;

//定义矩阵数组
typedef struct {
	Triple data[MAXSIZE + 1];//分配内存,最大为MAXSIZE
	int m;//行数
	int n;//列数
	int len;//非零元素个数
} TSmatrix;


int init(Triple* s) {
	s->row = s->col = 0;
}

int create(TSmatrix* b) {
	int i;
	//先执行清零操作,删除原来矩阵中存储的值
	for (i = 0; i < MAXSIZE; i++) {
		b->data[i].elem = 0;
	}
	printf("请输入行数列数以及非零元素个数:  ");
	scanf("%d%d%d", &b->m, &b->n, &b->len);
	for (i = 1; i <= b->len; i++) {
		printf("请依次输入元素的行、列、值:  ");
		scanf("%d%d%d", &b->data[i].row, &b->data[i].col, &b->data[i].elem);
	}
	system("cls");
	printf("\t\t\n\t\t矩阵录入成功了捏!!");
	getchar();
	getchar();
}

//C语言普通转置算法实现
void TransposetMatrix(TSmatrix a, TSmatrix* b)
{
	int i, j, k;
	//先执行清零操作,删除原来矩阵中存储的值
	for (i = 0; i < MAXSIZE; i++) {
		b->data[i].elem = 0;
	}
	b->m = a.n;
	b->n = a.m;
	b->len = a.len;
	if (b->len <= 0) 
		printf("矩阵是空的!\n");
	else 
		if (b->len > MAXSIZE) 
			printf("矩阵错误,超出最大存储空间!\n");
		else
		{
			j = 1;
			for (k = 1; k <= a.n; k++) 
				for (i = 1; i <= a.len; i++)
					if (a.data[i].col == k) 
					{ 
						b->data[j].row = a.data[i].col;//交换行和列
						b->data[j].col = a.data[i].row;//交换行和列
						b->data[j].elem = a.data[i].elem;//值不变,直接赋值就行
						j++;
					}
		}
}

//C语言快速转置算法实现
void fastTrans(TSmatrix a, TSmatrix* b)
{
	int i;
	//先执行清零操作,删除原来矩阵中存储的值
	for (i = 0; i < MAXSIZE; i++) {
		b->data[i].elem = 0;
	}
	int col, t, p, q;
	int num[MAXSIZE], position[MAXSIZE];
	b->len = a.len; 
	b->n = a.m;
	b->m = a.n;
	if (b->len <= 0)
		printf("矩阵是空的!");

	else if (b->len > MAXSIZE) 
			printf("数组错误,超过最大存储容量");
		
		else {
			for (col = 1; col <= a.n; col++) 
				num[col] = 0;

			for (t = 1; t <= a.len; t++) 
				num[a.data[t].col]++;
			position[1] = 1;

			for (col = 2; col < a.n; col++) 
				position[col] = position[col - 1] + num[col - 1];
			for (p = 1; p <= a.len; p++)
			{
				col = a.data[p].col;
				q = position[col];
				b->data[q].row = a.data[p].col;//这里访问冲突
				b->data[q].col = a.data[p].row;
				b->data[q].elem = a.data[p].elem;
				position[col]++;
			}
		}
}

void display(TSmatrix* b)
{
	printf("嘀嘀嘀......这个矩阵当前是这样的奥!!");
	putchar('\n');
	int i, j, k;
	for (i = 1; i <= b->m; i++) {
		for (j = 1; j <= b->n; j++)
		{
			for (k = 1; k <= b->len; k++)
			{
				if (b->data[k].row == i && b->data[k].col == j) {//行匹配,列也匹配的时候
					printf("%5d", b->data[k].elem);
					break;
				}
			}
			if (k > b->len)
				printf("%5d", 0);
			if (j == b->n)
			{
				putchar('\n');
				putchar('\n');
			}
		}
	}
	printf("\n\t按任意键返回!");
	getchar();
	getchar();
}

int chooseMethods() {
	while (1) {
		printf("\t\t请选择你要对矩阵转置的方式:\n");
		printf("\t\t\t1.使用普通转置的方式对矩阵进行转置\n");
		printf("\t\t\t2.使用快速转置的方式对矩阵进行转置\n");
		printf("\t\t\t3.返回上一级\n");
		printf("\t\t\t4.现在退出程序\n");
		printf("\t请输入你的选择: ");
		char choose;
		scanf("%c", &choose);
		switch (choose)
		{
		case '1':return 1; break;
		case '2':return 2; break;
		case '3':return 3; break;
		case '4':return 4; break;//退出信息
		default:
		{
			system("cls");
			printf("\t\t\t你你你........你好好看看选项奥!\n");
			printf("\t\t\t输错了...........\n");
			printf("\t\t\t重新输一遍吧\n");
		}
		getchar();
		getchar();
		system("cls");
		continue;
		}
	}
}

int menu() {//用户界面啊
	while (1) {
		printf("========================================================================================================\n");
		printf("\t\t\t\t欢迎使用矩阵转置小工具!\t\t\t\n");
		putchar('\n');
		printf("\t\t\t1.输入矩阵\t\t2.执行转置操作\n");
		putchar('\n');
		printf("\t\t\t3.打印当前矩阵\t\t4.退出程序\n");
		printf("========================================================================================================\n");
		printf("\t\t请选择你的操作:\t");
		char choose;
		scanf("%c", &choose);
		switch (choose)
		{
		case '1':return 1; break;
		case '2':return 2; break;
		case '3':return 3; break;
		case '4':return 4; break;
		default:
		{
			system("cls");
			printf("\t\t\t你你你........你好好看看选项奥!\n");
			printf("\t\t\t输错了...........\n");
			printf("\t\t\t重新输一遍吧\n");
		}
		getchar();
		getchar();
		system("cls");
		continue;
		}
	}
	
}

int main() {//主函数
	Triple s;//初始化矩阵
	TSmatrix a, b, c;//初始化矩阵
	init(&s);
	int isCreate = 0;
	char nowMatrix = 'a';//初始录入的矩阵保存在a中,此时函数所有的作用对象均为a
	//当前操作的矩阵.
	while (1) {
		system("cls");
		//程序清屏

		int choose = menu();
		//触发函数,进入主要的菜单,即用户的主界面,接受数据的返回值交给choose,choose包含了选择的信息。

		if (choose == 1) {//对选择的choose进行判断,如果choose 为1,那么就输入矩阵
			system("cls");

			create(&a);//调用创建的函数
			isCreate = 1;//是否创建的标识变为1,表示已经创建
			nowMatrix = 'a';
		}

		else if (choose == 2) {//如果选择的是2,先判断是否进行了创建
			system("cls");

			//判断当前的矩阵是否已经初始化。
			if (isCreate == 0) {
				putchar('\n');
				printf("\t\tNoNoNo!!!矩阵还没有初始化捏!请先执行1来初始化矩阵哦!");
				getchar();//停一下
				getchar();
			}
			else
				while (1) {//否则进入下一个循环菜单
					getchar();
					system("cls");
					int choose = chooseMethods();

					if (choose == 1) {//快速转置
						TransposetMatrix(a, &b);
						system("cls");
						printf("\t\t矩阵转置成功了!");
						getchar();//过滤两个回车
						//system("cls");
						nowMatrix = 'b';
						a = b;
					}

					else if (choose == 2) {//普通转置
						fastTrans(a, &c);
						system("cls");
						printf("\t\t矩阵转置成功了!");
						getchar();//过滤两个回车
						//system("cls");
						nowMatrix = 'c';
						a = c;
					}
					else if (choose == 3) {//返回上一级
						getchar();
						break;
					}
					else if (choose == 4) {
						system("cls");
						printf("\t\t程序即将退出..........");
						putchar('\n');
						Sleep(500);
						exit(0);
					}
				}

		}
		else if (choose == 3) {
			system("cls");
			if (isCreate == 0) {
				putchar('\n');
				printf("NoNoNo!!!矩阵还没有初始化捏!请先执行1来初始化矩阵哦!");
				getchar();
				getchar();
			}
			else {
				system("cls");
				if (nowMatrix == 'a') {
					display(&a);
				}
				else if (nowMatrix == 'b') {
					display(&b);
				}
				else if (nowMatrix == 'c') {
					display(&c);
				}
			}
		}

		else if (choose == 4) {
			system("cls");
			printf("\t\t程序即将退出..........");
			putchar('\n');
			Sleep(500);
			exit(0);
		}
	}
	return 0;
}
数据结构·练习·三元组表法实现稀疏矩阵的转置 数据结构·练习·稀疏矩阵的快速转置 一、问题描述 一个mxn的矩阵A,它的转置矩阵B是一个nxm矩阵,且A[i][j]=B[j][i],0<=i<=m-1,0<=j<=n-1,即A的行是B的列,A的列是B的行。 用三元组表对稀疏矩阵进行压缩存储,再进行时间复杂度O(n)的快速转置,最后输出稀疏矩阵。 其中m=4,n=5 二、算法概述 1、问题分析 1)压缩 2)转置 3)解压 2、算法描述 用三元组表压缩存储稀疏矩阵; 用向量num表示矩阵A每列的非零元素个数,用向量start表示 阅读详情

相关推荐

数据结构--3.3 矩阵转置

矩阵转置结构体创建初始化转置打印测试代码运行结果 1.稀疏矩阵的压缩存储,至少需要存储以下信息: 矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标; 矩阵的总行数和总列数; 上图是一个稀疏矩阵,若对其进行压缩存储,矩阵中各非 0 元素的存储状态如图 2 所示: 图 2 的数组中,存储的是三元组(即由 3 部分数据组成的集合),组中数据分别表示(行标,列标,元素值)。 2、矩阵(包括稀疏矩阵)的转置,即互换矩阵中所有元素的行标和列标 图 2a) 表示的是图 1 中转置之前矩阵的三元组表,2b) 表

m0_63944721的博客 1万+

[数据结构(C语言版本)上机实验]稀疏矩阵的三元组顺序表压缩存储以及转置实现(含快速转置)

(C语言版)数据结构--稀疏矩阵 1、编写程序任意输入一个稀疏矩阵,用三元组顺序表压缩存储稀疏矩阵。 2、对稀疏矩阵进行转置,输出转置后的矩阵。

weixin_49691084的博客 7499

数据结构--稀疏矩阵转置(列序递增算法)的c语言实现(超详细注释/实验报告)

稀疏矩阵是指矩阵中大多数元素为零的矩阵。从直观上讲,当非零元素个数低于总元素的30%时,这样的矩阵为稀疏矩阵。

池塘春草梦的博客 5712

【数据结构】稀疏矩阵存储的三种方法及三元组表示稀疏矩阵转置算法的两种实现 —— C++

【数据结构】稀疏矩阵存储的三种方法及三元组表示稀疏矩阵转置算法的两种实现 —— C++

枯木何日可逢春 3903

数据结构 --- 稀疏矩阵的基本运算

# include <stdio.h> # include <stdlib.h> # define M 4 # define N 4 # define MaxSize 200 # define ElemType int typedef struct { int r;//行号 int c;//列号 ElemType d;//元素值 }TupNo...

horizon08的博客 7444

C语言数据结构稀疏矩阵的转置

/* *稀疏矩阵的转置 *创建一个二维数组 *创建一个三元组数组来存放矩阵的元素 *转置矩阵存放的公式为 sum[] 数组存放每一列的非零元素的个数 *cpot[]数组存放每一列第一个非零元素在转置三元组中的位置 */ #include<stdio.h> #include<stdlib.h> #include<time.h> #define MAXSIZE 1...

Algorithm_Soul 1893

用三元组存储稀疏矩阵并实现转置

基本概念 在学习线性代数的时候,经常用到矩阵。在C语言中,表示矩阵的最直观形式就是二维数组。然而在实际应用中,很多高阶矩阵中的非零元素非常少,这个时候如果继续使用二维数组存储,那么就会浪费很多存储空间。          在数据结构中,我们用三元组存储稀疏矩阵。三元组定义为(i,v,j),这三个值一次表示矩阵的行、列、值。

4万+

数据结构稀疏矩阵的转置及快速转置操作实现

稀疏矩阵头文件,宏定义,重命名创建矩阵销毁矩阵输出矩阵普通转置快速转置完整源码 头文件,宏定义,重命名 #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define OVERFLOW -2 #define MAXSIZE 12500 typedef int ElemType; typedef int Status; //-----稀疏矩阵的三元组顺序表存储表示---- typedef s

iCode 3282

使用C语言实现矩阵转置(稀疏矩阵)

使用C语言实现矩阵转置(稀疏矩阵)

Keep_Trying_Go的博客 1万+

Android开发者必看:5分钟搞定MQTT客户端连接EMQX服务器(附完整代码)

本文为Android开发者提供了一份快速实现MQTT客户端连接EMQX服务器的实战指南。通过引入Eclipse Paho SDK,详细讲解了从项目配置、权限申请到核心连接、主题订阅与消息发布的完整流程,并附有即拿即用的Kotlin代码,帮助开发者在物联网应用中高效集成轻量级实时通信功能。

weixin_29228781的博客 271

[医学图像分割综述] Medical Image Segmentation Using Deep Learning: A Survey

本综述有两个独创之处,首先,与传统的调查方法直接将医学图像分割的文献划分为多个组,并对每个组详细介绍文献的方法相比,我们将目前流行的文献按照从粗到细的多层次结构进行分类。其次,本文重点研究了监督学习和弱监督学习方法,但未包括无监督方法,这种方法目前在医学图像领域并不流行。对于监督学习方法,我们从骨干网络的选择、网络块的设计和损失函数的改进三个方面对文献进行了分析。对于弱监督学习方法,我们分别根据数据增强,迁移学习和交互式分割研究文献。与已有的调查相比,本次调查的文献分类与以往有很大的不同,更便于读者了解相关

qq_38932073的博客 4万+

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

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

weixin_51450101的博客 1万+

ENVI学习总结(十二)——基于改进的 CASA 模型反演 NPP

基于改进的 CASA 模型反演 NPP 数据为地理空间数据云提供的 TM 影像,其具体信息如图 1 所示。该实验中所使用的 TM 数据已进行过 QUAC 快速大气校正,来消除大气和光照等因素对地物反射的影响。Landsat 主题成像仪(TM)是 Landsat4 和 Landsat5 携带的传感器,每 16 天扫描同一地区,即 16 天覆盖全球一次。 TM 影像包含 7 个波段,波段 1-5 ...

Arcgiser的博客 3万+

【数据结构】实现稀疏矩阵(采用三元组表示)的基本运算C语言/C++实现(代码有注释)

文章目录一、问题二、使用步骤1.引入库2.读入数据总结 一、问题 实现稀疏矩阵(采用三元组表示)的基本运算 目的:领会稀疏矩阵三元组的存储结构及其基本算法设计。 内容:假设 nn 的稀疏矩阵 A 采用三元组表示,设计一个程序 exp6-1.cpp,实现如下功能:。 生成如下两个稀疏矩阵的三元组 a 和 b。 输出 a 转置矩阵的三元组。 输出 a+b 的三元组。 输出 ab 的三元组。 提示:本实验设计的功能算法如下 ➢ CreatMat(TSMatrix &t,ElemTy

qq_45280880的博客 1万+

【PowerHarmony】电鸿蒙学习记录-准备工作

将获取的“PowerHarmony_PHM_SDK_V1.0.1.0.tar.gz”进行解压。将获取的“code_1.91.1-1720564633_amd64.deb”进行解压。打开后可见所有文件夹,即可进行编辑开发,VSCode也可打开终端进行编译等调试。选择主控类型,我是用的是gd32f470,我选gd32f4xx。Open Folder路径选中SDK解压后根目录即可。选择对应系统类型,我的是小型的,我选mini。选好后即完成工程创建。

Allenzhu的博客 2729

到底什么是电源的斜波补偿,电源芯片CS引脚作用,一文讲清楚!

上文有提到电流环,其实电流环再细分也有很多模式,用的最多的是峰值电流模式峰值电流模式调节工作原理如下:(1)当输出负载增大时,输出电压降低,因此,Vc 增大,线性增加的电感电流只有升高到更大的值才能使 PWM 电流比较器翻转,开关管导通的时间增长,占空比增加,输入功率增加,因此输出电压增加,当输出电压增加到调节的范围内时,系统保持平衡。

jwgdhuwdhg的博客 1万+

矩阵(稀疏矩阵)的转置算法(C语言)详解(三元组表)

矩阵(包括稀疏矩阵)的转置,即互换矩阵中所有元素的行标和列标,如图 1所示: 图 1 矩阵转置示意图 但如果想通过程序实现矩阵的转置,互换行标和列标只是第一步。因为实现矩阵转置的前提是将矩阵存储起来,数据结构中提供了 3 种存储矩阵的结构,分别是三元组顺序表、行逻辑链接的顺序表和十字链表。如果采用前两种结构,矩阵的转置过程会涉及三元组表也跟着改变的问题,如图 2 所示: 图 2 三元组表的变化 图 2a) 表示的是图 1 中转置之前矩阵的三元组表,2b) 表示的是图 1 中矩阵转置后对..

Big Fish 大鱼 的个人博客 1万+

单细胞转录组上游分析完整流程(超详细)

本指南详细介绍单细胞转录组数据分析流程,从10xGenomics平台数据出发,使用CellRanger工具完成从原始FASTQ文件到基因表达矩阵的全过程。内容涵盖:1) 环境准备与参考基因组获取;2) 测试数据下载;3) 数据质量检测方法;4) CellRanger核心流程详解;5) 结果解读;6) 下游分析衔接。同时提供开源替代方案kallisto|bustools的使用说明,并解答常见问题。适合单细胞转录组分析初学者快速掌握标准分析流程。

Rita_rr的博客 1156

数据结构实验报告之三元组顺序表存储的稀疏矩阵练习

数据结构实验报告之三元组顺序表存储的稀疏矩阵练习一、实验内容1.实验目的2.实验内容二、实现过程 一、实验内容 1.实验目的 为了更加深入了解三元组以及稀疏矩阵,学会快速转置稀疏矩阵的算法设计并以此为基础思考其他相关问题。本次实验主要以解决某特定6阶稀疏矩阵三对角线元素之和以及转置该6阶矩阵为目的而进行算法设计以及代码实现。 2.实验内容 (1)构建一个三元组顺序表存储的稀疏6阶方阵 (2)求解...

mistakesglue的博客 5373

AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 1万+

堆一呼一吸之间:动态扩缩容引发JVM堆内存震荡的伸缩算法、代际传导与容器定容解析

Kubernetes扩容后,新Java实例的GC频率常比老实例高出数倍,堆容量反复伸缩。本文从一次支付系统的GC陡增出发,结合HotSpot源码与JDK 8实测,拆解堆伸缩的记账规则:期望容量以GC后已用量为基数、以Xms为下限,按空闲比例判断扩缩,收缩只在老年代回收后按0%、10%、40%、100%步进;再剖析年轻代随老年代联动、晋升风暴与元空间触发线,对比Parallel、G1、ZGC等收集器及JDK 26的变化,讨论容器分账、HPA共振与原地扩缩容,最后给出分级定容、预热与监控的方案。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 15万+

数据结构严蔚敏----稀疏矩阵的三元组表示

编程语言:C 编译环境:Dev-C++ 题目:输入稀疏矩阵,建立稀疏矩阵三元组顺序结构,实现转置 先来了解一下稀疏矩阵和三元组的关系: 稀疏矩阵的概念是:一个m行n列的矩阵,若它的非零元个数特别少,即可称它为稀疏矩阵 如何进行稀疏矩阵的压缩存储呢? 只存储稀疏矩阵的非零元。除了存储非零元的值a以外,还必须记下它的行下标i和列下标j 反之,一个三元组(a,i,j)唯一确定矩阵的一个非零元 因此,一个...

qq_41059755的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

用三元组存储稀疏矩阵,实现其快速转置c语言代码,三元组稀疏矩阵快速转置C语言算法...

三元组稀疏矩阵快速转置C语言算法徐光联摘要:三元组稀疏矩阵的快速转置算法在《数据结构》课程中是一个难点,这里给出三元组稀疏矩阵的转置算法详细讲解,并给出C语言算法的源程序。关键词:三元组;稀疏矩阵;快速转置{int m,n,t;              /*  m 表示行数, n 表示列数,t 表示非零元素个数  */Mat  data[MAXSIZE];  /*  所存储元素的最大个数 */)...

weixin_32526561的博客 3712

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构进阶(二)矩阵(稀疏矩阵)的压缩存储

矩阵(稀疏矩阵)的压缩存储注 本文转载地址:http://blog.163.com/zhoumhan_0351/blog/static/39954227201001112526244/ 为了节省存储空间并且加快处理速度,需要对这类矩阵进行压缩存储,压缩存储的原则是:不重复存储相同元素;不存储零值元素。一、相关概念㈠特殊矩阵 矩阵中存在大多数值相同的元,或非0元,且在矩...

IT全栈 华强工作室 6万+

深度学习工具包 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")

(详细)C语言实现-稀疏矩阵及其转置(数据结构)

(详细)C语言实现-稀疏矩阵及其转置(数据结构)

m0_54158068的博客 5802

稀疏矩阵(C语言)

稀疏矩阵是什么? -设在 m×n 的矩阵中有 t 个非零元素。令z= t /(m×n),当z≤0.05 时称为稀疏矩阵。也就是说,该矩阵中充斥着大量的0。 稀疏矩阵怎么存储? - 因为矩阵中有大量的0,所以我们只记录非零元素。记录非0元素的所在行数、列数、值。由此引了出三元组。 - 什么是三元组? -要记录非0元的信...

写写代码 7455
上一篇: DC1靶场练习记录
下一篇: python多线程编程
Littlewith
博客等级 码龄5年 205粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值