KMP算法
与KMP对应的是BF算法,也就是最朴素的逐一回溯比较法,非专业人士也能想到的一种算法,不做过多赘述。重点放在KMP算法上。
KMP最核心的地方在于next数组的求法
https://www.zhihu.com/question/21923021/answer/281346746
这个回答很好的解释了next数组的求解方式,看完恍然大悟的感觉。
多维数组
其实并不存在多维数组,所谓的多维数组其实是人为划分的一维数组,例如,按照等长度划分一个一维数组,划分的次数就是二维数组的行数,这个长度就是二维数组的列数。除此之外,将等长一维数组的指针存放在一个一维指针数组里,也行成了一个二维数组,如此递推可以构建多维数组。
二维数组的寻址公式(以先列后行为例)
某点的地址=二维数组中的第一个点的地址+中间相隔的元素个数
矩阵的压缩存储
压缩存储的基本思想是:
⑴ 为多个值相同的元素只分配一个存储空间;
⑵ 对零元素不分配存储空间。
对称矩阵只存储下三角部分的元素。
若一维数组的下标从0开始,则k=i*(i-1)/2+j
三角矩阵只存储上三角(或下三角)部分的元素。
对角矩阵 (带状矩阵)压缩存储方法一 :二维数组法
方法二:用一个一维的数组存储对角线上的非零元素,共3n-2个元素
稀疏矩阵可以构建三元组顺序表存储,包括横纵坐标和元素个数
十字链表和广义表
template
class OLNode
{
public:
int row,col;
T element;
OLNode* right,*down;
public:
OLNode(){
right=NULL;
down=NULL;
};
};
这里是引用