第九周-项目2 - 对称矩阵压缩存储的实现与应用
2015-10-30 19:49
357 查看
/*Copyright (c) 2015,烟台大学计算机学院 *All right reserved *文件名称:博客.cpp *作者:贾召飞 *完成日期:2015年10月30日 *版本号:v1.0 * *问题描述: 数据结构例程——对称矩阵的压缩存储及基本运算 */
#include <stdio.h> #define N 4 #define M 10 int value(int a[],int i,int j) { if (i>=j) return a[(i*(i+1))/2+j]; else return a[(j*(j+1))/2+i]; } void madd(int a[],int b[],int c[] ) { int i,j; for (i=0; i<N; i++) for (j=0; j<N; j++) c[i][j]=value(a,i,j)+value(b,i,j); } void mult(int a[],int b[],int c[] ) { int i,j,k,s; for (i=0; i<N; i++) for (j=0; j<N; j++) { s=0; for (k=0; k<N; k++) s=s+value(a,i,k)*value(b,k,j); c[i][j]=s; } } void disp1(int a[]) { int i,j; for (i=0; i<N; i++) { for (j=0; j<N; j++) printf("%4d",value(a,i,j)); printf("\n"); } } void disp2(int c[] ) { int i,j; for (i=0; i<N; i++) { for (j=0; j<N; j++) printf("%4d",c[i][j]); printf("\n"); } } int main() { int a[M]= {1,2,3,4,5,6,7,8,9,10}; //a表示压缩存储的对称矩阵 int b[M]= {1,1,1,1,1,1,1,1,1,1}; int c1 ,c2 ; madd(a,b,c1); mult(a,b,c2); printf("a矩阵:\n"); disp1(a); printf("b矩阵:\n"); disp1(b); printf("a+b:\n"); disp2(c1); printf("a×b:\n"); disp2(c2); printf("\n"); return 0; }
学习心得:
在计算机中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和;
让我对矩阵的算法更加深刻了。
运行结果如下:
相关文章推荐
- 二叉树中度为0的结点数与度为2的结点数关系论证
- UITableView的cell自适应高度
- WSGI规范细则
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- 看看我们以前搞过的几个对象
- Android接口回调机制
- 0 or 1(最短路转化)
- android自定义控件
- 归并排序、快速排序
- 机房收费系统——数据库设计说明书
- 学习git小结(二)
- Objective-C:数组排序、过滤
- 2015南阳CCPC C - The Battle of Chibi DP树状数组优化
- 使用Beautifulsoup爬取药智网数据
- android power-wakelock kernel
- Spring MVC controller 读取配置文件
- 80 Remove Duplicates from Sorted Array II
- UVALive 6886 Golf Bot
- PostgreSQL——启动脚本
- hibernate抓取策略(fetch)