当前位置: 首页 > wzjs >正文

php网站开发专业高质量外链

php网站开发专业,高质量外链,自做购物网站多少钱,网站建设管理中se是什么意思稀疏矩阵的概念 在实际应用中,我们经常会遇到一些矩阵,其中大部分元素都是零,只有少量的非零元素。这种矩阵被称为稀疏矩阵。例如,在图像处理、网络分析等领域,稀疏矩阵经常出现。如果使用传统的二维数组来存储稀疏矩…

稀疏矩阵的概念

在实际应用中,我们经常会遇到一些矩阵,其中大部分元素都是零,只有少量的非零元素。这种矩阵被称为稀疏矩阵。例如,在图像处理、网络分析等领域,稀疏矩阵经常出现。如果使用传统的二维数组来存储稀疏矩阵,会浪费大量的存储空间,因为大部分的数组元素都是零。因此,我们需要一种更高效的存储方法,三元组表示法就是其中之一。

三元组表示法的原理

三元组表示法的核心思想是只存储稀疏矩阵中的非零元素。对于每个非零元素,我们用一个三元组 (i, j, e) 来表示,其中 i 是元素的行号,j 是元素的列号,e 是元素的值。然后,将这些三元组按一定的顺序存储在一个顺序表中,同时记录矩阵的行数、列数和非零元素的个数。这样,我们就可以用一个较小的存储空间来存储稀疏矩阵。

完整代码如下:

#include <stdio.h>
#include <stdlib.h>  // 使用标准库的内存分配函数// 定义元素类型为整数
typedef int ElemType;// 定义三元组最大数量
#define MAXSIZE 1000// 三元组结构,用于存储矩阵中非零元素的行、列和值
typedef struct 
{int i, j;        // i 表示行号,j 表示列号ElemType e;      // e 表示元素的值
} Triple;// 三元组顺序表,用于存储稀疏矩阵
typedef struct
{int mu, nu, tu;  // mu 为矩阵的行数,nu 为矩阵的列数,tu 为非零元素的个数Triple data[MAXSIZE];  // 存储三元组的静态顺序表
} TSMatrix;// 创建一个三元组表示的稀疏矩阵
void creatTSMatrix(TSMatrix *M, int m, int n) 
{int row, col, val;int k = 0;M->mu = m;  // 设置矩阵的行数M->nu = n;  // 设置矩阵的列数printf("请输入非零元素的行、列、值,以逗号分隔,输入行号为 0 时结束:\n");while (1) {if (scanf("%d,%d,%d", &row, &col, &val) != 3){// 处理输入格式错误printf("输入格式错误,请重新输入!\n");while (getchar() != '\n');  // 清除错误输入continue;}if (row == 0) {break;  // 输入行号为 0 时结束输入}if (k >= MAXSIZE - 1){printf("非零元素数量超过最大限制!\n");break;}k++;M->data[k].i = row;M->data[k].j = col;M->data[k].e = val;}M->tu = k;  // 记录非零元素的个数
}// 输出三元组稀疏矩阵
void OutputTSMatrix(TSMatrix *M) 
{int k;printf("(");  // 输出左括号for (k = 1; k < M->tu; k++) {printf("(%d,%d,%d),", M->data[k].i, M->data[k].j, M->data[k].e);}if (M->tu > 0) {printf("(%d,%d,%d)", M->data[k].i, M->data[k].j, M->data[k].e);  // 输出最后一个元素,后面无逗号}printf(")");  // 输出右括号printf("\n");
}// 求三元组的转置矩阵三元组
void TSMatrix_Transpose(TSMatrix *M, TSMatrix *T) 
{int k, col, i;T->mu = M->nu;  // 转置矩阵的行数等于原矩阵的列数T->nu = M->mu;  // 转置矩阵的列数等于原矩阵的行数T->tu = M->tu;  // 转置矩阵的非零元素个数等于原矩阵的非零元素个数if (T->tu == 0) {printf("矩阵无有效元素,无法转置!\n");return;}k = 1;for (col = 1; col <= M->nu; col++) {  for (i = 1; i <= M->tu; i++) 		// 按列遍历原矩阵{    if (M->data[i].j == col)		// 查找所有元素中列号为 col 的元素{T->data[k].i = M->data[i].j;  // 把列号变为转置矩阵的行号T->data[k].j = M->data[i].i;  // 把行号变为转置矩阵的列号T->data[k].e = M->data[i].e;  // 值赋予k++;}}}OutputTSMatrix(T);
}int main() 
{TSMatrix *M, *T;int m = 5, n = 4;M = (TSMatrix *)malloc(sizeof(TSMatrix));T = (TSMatrix *)malloc(sizeof(TSMatrix));if (M == NULL || T == NULL) {printf("内存分配失败!\n");return 1;}creatTSMatrix(M, m, n);printf("原矩阵的三元组表示:");OutputTSMatrix(M);printf("转置矩阵的三元组表示:");TSMatrix_Transpose(M, T);free(M);  // 释放内存free(T);return 0;
}

数据结构定义

typedef struct {int i, j;ElemType e;
} Triple;typedef struct {int mu, nu, tu;Triple data[MAXSIZE];
} TSMatrix;

这里定义了两个结构体,Triple 结构体用于存储非零元素的三元组,TSMatrix 结构体用于存储稀疏矩阵的基本信息和非零元素的三元组。

创建稀疏矩阵

void creatTSMatrix(TSMatrix *M, int m, int n) {// ...
}

creatTSMatrix 函数用于创建一个三元组表示的稀疏矩阵。通过循环读取用户输入的非零元素的行、列、值,直到输入的行号为 0 时结束。这样,我们就可以将用户输入的稀疏矩阵存储为三元组表示的形式。

输出稀疏矩阵

void OutputTSMatrix(TSMatrix *M) {// ...
}

OutputTSMatrix 函数用于输出三元组稀疏矩阵。按照指定的格式输出所有非零元素的三元组,方便我们查看矩阵的存储情况。

求转置矩阵

void TSMatrix_Transpose(TSMatrix *M, TSMatrix *T) {// ...
}

TSMatrix_Transpose 函数用于求三元组的转置矩阵三元组。通过按列遍历原矩阵,将原矩阵中列号为 col 的元素的列号变为转置矩阵的行号,行号变为转置矩阵的列号,值保持不变。这样,我们就可以得到原矩阵的转置矩阵的三元组表示。

运行:

即原矩阵:0 0 3           转置后:0 0 5

                  0 0 4                         3 0 0

                  5 0 0                         0 4 0

三元组表示法的优缺点

优点

  • 节省存储空间:只存储非零元素,避免了大量零元素的存储,节省了存储空间。
  • 便于操作:通过三元组表示法,可以方便地进行矩阵的各种操作,如转置、加法等。

缺点

  • 插入和删除操作复杂:如果需要插入或删除非零元素,需要对三元组顺序表进行移动和调整,操作比较复杂。
  • 不适合随机访问:由于三元组顺序表是按一定顺序存储的,不适合随机访问矩阵中的元素。

总结

稀疏矩阵的三元组表示法是数据结构课程中的一个重要内容,它通过只存储非零元素的方式,有效地节省了存储空间。

http://www.dtcms.com/wzjs/232363.html

相关文章:

  • 处方药可以做网站吗百度软件商店下载安装
  • 邯郸教育网站建设国家反诈中心app下载
  • 用什么网站做框架图百度网页版登录入口
  • 高密做网站哪家强价位武汉seo论坛
  • 青岛网站制作网站百度人工电话多少号
  • 即时设计生成网页seo软件排行榜前十名
  • 哪些网站做的人比较少百度营销搜索推广
  • 做网站的会淘宝美工么重庆seo
  • 网站开发微信支付详细教程seo做关键词怎么收费的
  • 做火情监控网站需要用什么系统免费搭建网站
  • 消防做ccc去那个网站福建seo顾问
  • 简易的网站制作上海网络推广平台
  • 百度搜索网南京seo关键词优化预订
  • 临沧网站建设ynyue如何编写一个网站
  • 做网站需要资料关键词搜索量全网查询
  • 海淀网站建设公司搜索引擎营销的方法
  • 目前我国政府网站建设情况推广平台怎么做
  • 网站建设建网站网络营销推广软件
  • 顺德新网站建设全球网站流量排名查询
  • 官方网站免费建设八爪鱼磁力搜索引擎
  • 网站建设网站排名优化金牌服务最新一周新闻
  • 重庆餐饮网站建设久久seo正规吗
  • 南昌网站设计制作班级优化大师手机版下载
  • 南通企业自助建站销售新人怎么找客户
  • 做视频网站需要多大的带宽投放广告的网站
  • wap网站建设服务国通快速建站
  • 什么是网络营销?网络营销的基本职能有哪些方面windows优化大师卸载不掉
  • 注册完域名怎么做网站百度知道网页版入口
  • 毕节做网站分销系统
  • 毕业设计都是做网站吗百度提交入口网站网址