Java数据结构之对称矩阵的压缩算法---
aij=aji 1<=i<=n,1<=j<=n
元素个数m = n*(n+1)/2
i*(i-1)/2+j-1 当i>=j
k=
j*(j-1)/2+i-1 当i<j
//对称矩阵的压缩算法
public class SymeMatric { double[] a;// 矩阵元素
int n; // 矩阵的阶数
int m;// 一维数组的元素的个数--长度 public SymeMatric(int n) {
// 对称矩阵中不重复元素,保存到一维数组中所需要的一维数组的长度
// 2阶对称矩阵对应(1+2=3)维数组,3阶对称矩阵对应1+2+3=6维数组,
// 4阶对称矩阵对应1+2+3+4维数组,n阶对称矩阵对应前n项和,
// 所以一维数组的长度m的值为1,2,3...n的前n项和
m = n * (n + 1) / 2;
a = new double[m];
this.n = n;
} // 通过一个二维数组来初始化
public void evalute(double[][] b) {
int k = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// i >= j表示只保存下三角元素
if (i >= j) {
a[k++] = b[i][j];
}
}
}
} // 通过一个一维数组来初始化,那么这个一维数组就是对称矩阵元素的一个副本
public void evalute(double[] b) {
for (int k = 0; k < m; k++) {
a[k] = b[k];
}
} // 对称矩阵相加
public SymeMatric add(SymeMatric b) {
SymeMatric t = new SymeMatric(n);
int k;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i >= j) {
k = i * (i - 1) / 2 + j - 1;
} else {
k = j * (j - 1) / 2 + i - 1;
}
// 求和
t.a[k] = a[k] + b.a[k];
}
}
return t;
} // 打印对称矩阵,这个才是关键!!
public void print() {
int k;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i >= j) {
k = i * (i - 1) / 2 + j - 1;
} else {
k = j * (j - 1) / 2 + i - 1;
}
System.out.print(" " + a[k]);
}
System.out.println();
}
} }
public class Test {
public static void main(String[] args) {
SymeMatric m1 = new SymeMatric(3);
SymeMatric m2 = new SymeMatric(3);
SymeMatric m3;
double[][] a = { { 1, 0, 0 }, { 2, 3, 0 }, { 4, 5, 6 } };
double[] b= {1,2,3,4,5,6};
m1.evalute(a);
m2.evalute(b);
m1.print();
System.out.println();
System.out.println();
m2.print();
}
}
Java数据结构之对称矩阵的压缩算法---的更多相关文章
- java数据结构至对称矩阵压缩存储
刚刚刷java选择题,遇到的对称矩阵压缩存储问题,我们知道对称矩阵是aij=aji的矩阵,压缩存储可以采用一维数组和二维数组存储. 此处只讨论一维数组存储的形式,设数组下标从0开始,对称矩阵为n维矩阵 ...
- Java数据结构和算法 - 二叉树
前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...
- Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用
Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...
- JAVA数据结构系列 栈
java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...
- Java数据结构之树和二叉树(2)
从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...
- Java数据结构之树和二叉树
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- java 数据结构 图
以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客,主要是在自己理解的基础上进行记录. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示 ...
随机推荐
- 学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向
数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map ...
- 几款不错的VisualStudio2010插件
1.Gradient Selection 这个插件能使VisualStudio的高亮文本看起来是类似Blend的那样的效果,看起来更加舒服 2.LineAdornments 这个插件可以高亮光标所在的 ...
- win7与virtualbox中centos文件共享
1.首先在Windows下创建一个文件夹,用于存放共享的文件,例如 E:\share 2.将该文件夹设置为共享文件夹. 右击文件夹,选择共享->特定用户 选择Everyone->添加-&g ...
- ASP.NET Web API 2基于令牌的身份验证
基于令牌的认证 我们知道WEB网站的身份验证一般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别用户. WEB A ...
- 【java学习笔记】字符串和Date的转换
String dateVal = "1992-12-06 18:34:23"; SimpleDateFormat sdf = new SimpleDateFormat(" ...
- Title Case a Sentence
解决思路 将字符串转换成小写 把字符串分割成字符串数组 循环数组将每一个单词首字母大写 把数组所有的元素转换成一个字符串 第一种方法 function titleCase(str) { str=str ...
- Redis 3.2 Linux 环境集群搭建与java操作
redis 采用 redis-3.2.4 版本. 安装过程 1. 下载并解压 cd /usr/local wget http://download.redis.io/releases/redis-3. ...
- Oracle数据库导入、导出dmp文件
oracle导出数据: 1.该处的导出数据需要在dos命令行下执行,进入到oracle客户端路径下执行(该处也可为oracle客户端路径配置系统变量),如: E:\oraclexe\app\oracl ...
- Sql Server中暂停命令
Sql Server中暂停几秒再执行后面的命令! -- 语法WAITFOR { DELAY 'time_to_pass' | TIME 'time_to_execute' | [ ( r ...
- vue 实现分转元的 过滤器
1.啥也不说了直接上代码吧 使用起来超方便 Vue.filter('amount', function (number) { // var number = +val.replace(/[^\d.] ...