摘要: 矩阵相乘的前提条件是:乘号前的矩阵的列数要和乘号后的矩阵的行数相等。且矩阵的乘法运算没有交换律,即 A*B 和 B*A 是不一样的。 例如,矩阵A:矩阵B:由于矩阵 A 的列数和矩阵 B 的行数相等,可以进行 A*B 运算(不能进行 B*A 运算)。计算方法是:用矩阵A的第 i 行和矩阵B中的每一列 阅读全文
posted @ 2018-05-14 15:13 程序员进阶笔记 阅读(3643) 评论(0) 推荐(0)
摘要: 矩阵的转置实际上就是将数据元素的行标和列标互换,即 T(i,j) = M(j,i) 。例如: 图1 矩阵的转置 相应地,三元组表转变为: 图2 三元组表 矩阵的转置,经历了三个步骤: 矩阵的行数 n 和列数 m 的值交换; 将三元组中的i和j调换; 转换之后的表同样按照行序(置换前的列序)为主序,进 阅读全文
posted @ 2018-05-14 15:03 程序员进阶笔记 阅读(18204) 评论(0) 推荐(1)
摘要: 如果矩阵中有很多数值相同的数据元素,在存储时,可以考虑对其进行适当的压缩存储。 有必要压缩存储的矩阵大致分为两大类: 矩阵中含有大量的相同数值,称为特殊矩阵(例如对称矩阵和上下三角矩阵)。 矩阵中只有极少量的元素是非 0 元素,称为稀疏矩阵。 两类矩阵压缩存储的方法: 特殊矩阵中,对于相同的数据元素 阅读全文
posted @ 2018-05-14 13:45 程序员进阶笔记 阅读(4129) 评论(0) 推荐(0)
摘要: 数组,所有的程序设计语言学习之初都有它的身影。根据数组中存储的数据元素之间的逻辑关系,可以将数组分为 : 一维数组、二维数组、…、n维数组。 n维数组中,维数 n 的判断依据是:根据数组中为确定元素所在位置使用的最少的下标个数。例如,二维数组中想唯一确定一个元素的位置,至少需要使用 2 个下标, a[1][1]代表二维数组中行坐标为 1,列坐标为 1 的数据元素的值。 数组VS顺序表 数组和顺... 阅读全文
posted @ 2018-05-14 13:41 程序员进阶笔记 阅读(1902) 评论(0) 推荐(0)
摘要: 本章主要介绍了数组和广义表的相关知识。数组章节,重点理解矩阵压缩存储的方式,在此基础上,学习矩阵的转置、乘法、和加法运算的实现;学习广义表时重点理解用递归的思想求广义表的深度和复制广义表。 本章内容: 1. 数据结构之多维数组 2. 矩阵压缩存储(十字链表、三元组顺序表、行逻辑 3. 矩阵转置算法及代码实现(三元组顺序表) 4. 矩阵乘法(行逻辑链接的顺序表)及代码实现 5. 矩阵加法(基于十字... 阅读全文
posted @ 2018-05-14 12:04 程序员进阶笔记 阅读(821) 评论(0) 推荐(0)
摘要: 完整实现代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 1000 //KMP算法中的next数组 void Next(char *T, int *next){ int i=1; next[1]=0; 阅读全文
posted @ 2018-05-14 11:36 程序员进阶笔记 阅读(804) 评论(0) 推荐(0)
摘要: 通过上一节的介绍,学习了串的普通模式匹配算法,大体思路是:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个过程称为“指针回溯”),同时模式串向后移动一个字符的位置。一次次的循环,直到匹配成功或者程序结束。 "KMP"算法相比于"BF" 阅读全文
posted @ 2018-05-14 11:05 程序员进阶笔记 阅读(20375) 评论(4) 推荐(5)