随笔分类 -  算法与数据结构

摘要:InnoDB存储引擎的数据存储结构 B+ 树 为什么选择B+树? 因为B+树的叶子节点存储了所有的data,所以它的非叶子节点可以存储更多的key,使得树更矮;树的高度几乎就是I/O的次数,所以选择更矮的B+树更好。 B+树的所有叶结点构成是一个有序链表并用指针连接(双向指针),可以提高范围查询的速 阅读全文
posted @ 2022-11-04 22:51 天凉好个秋秋 阅读(31) 评论(0) 推荐(0)
摘要:哈希函数具有单向性,它是将任一长度的输入信息转化为单一长度的输出的函数 阅读全文
posted @ 2022-05-27 11:30 天凉好个秋秋 阅读(103) 评论(0) 推荐(0)
摘要:1.哈夫曼树就叫最优二叉树 2.最优形态不唯一 阅读全文
posted @ 2022-05-27 11:29 天凉好个秋秋 阅读(84) 评论(0) 推荐(0)
摘要:对于二叉树,叶子节点数 = 度为2的节点数+1 阅读全文
posted @ 2022-05-26 19:54 天凉好个秋秋 阅读(601) 评论(0) 推荐(0)
摘要:区分队空还是队满的情况: 1)牺牲一个单元来区分队空和队满 队空:队首指针 = 队尾指针 队满:(队尾指针 + 1)% MAXSIZE = 队首指针 2)类型中增加一个表示元素个数的数据成员 3)tag数据成员 阅读全文
posted @ 2020-05-16 10:58 天凉好个秋秋 阅读(195) 评论(0) 推荐(0)
摘要:1.含有 n 个结点平衡二叉树的最大深度为 log2n 这个问题可以这么想:深度为h的平衡二叉树每层含有的最少结点数 N0= 0,N1 = 1,N2 = 2,并且有 Nh = Nh-1 + Nh -2 +1 阅读全文
posted @ 2020-05-09 20:40 天凉好个秋秋 阅读(1136) 评论(0) 推荐(0)
摘要:一、树的性质 1.树中的结点数 + 1 = 度数 二、二叉树的性质 1.高度为h的满二叉树,含有的结点数是 2h - 1 。 =》具有n个结点的完全二叉树的高度为 log2 n(向下取整) + 1 =》二分查找法最多查找次数也是这个值,即 log2 n(向下取整) + 1 2.非空二叉树上的叶子结点 阅读全文
posted @ 2020-05-09 16:36 天凉好个秋秋 阅读(442) 评论(0) 推荐(0)
摘要:1.复制额外的空间,然后头插法 2.原地逆置,本质上是将指针反转达到逆置的效果。 假设pre、p和r指向3个相邻的结点,如上图。*pre之前的结点的指针都已经调整完毕,它们的next指针都指向其原前驱结点。 现在令*p结点的next域指向*pre结点,注意到一旦调整指针的指向后,*p的后继结点的链就 阅读全文
posted @ 2020-05-09 16:04 天凉好个秋秋 阅读(325) 评论(0) 推荐(0)
摘要:非连通图如何访问每一个结点 1.BFS : 定义标记数组,初始化为false,表示都没有访问过。对每一个连通分量,调用一次BFS,如果Vi没有访问过,从Vi开始 BFS。 阅读全文
posted @ 2020-05-09 15:52 天凉好个秋秋 阅读(235) 评论(0) 推荐(0)
摘要:最小生成树 1.定义 权值和最小的生成树,极小连通子图,包含所有的顶点,尽可能少的边,多一条边就会构成回路,少一条边就会不连通。 2.求法 求最小生成树必须解决如下问题: 1)尽可能选取权值最小的边,并且不构成回路 2)尽可能使 n 个顶点连接 n - 1 条边连通 常见方法有:Prim算法和 Kr 阅读全文
posted @ 2020-05-09 10:40 天凉好个秋秋 阅读(253) 评论(0) 推荐(0)
摘要:为什么需要编译? 理论上来说改造专用计算机来直接执行某种高级语言写的程序是可能的,但目前的计算机能执行的都是非常低级的机器语言。 编译,就是翻译,就是将高级语言变换成机器语言。 编译的过程 词法分析:读入源程序的字符流 -> 记号流 语法分析:利用编程语言的语法规则检查词法分析输出的记号流是否符合规 阅读全文
posted @ 2020-05-07 10:49 天凉好个秋秋 阅读(164) 评论(0) 推荐(0)
摘要:1.双亲表示法 因为节点的双亲是唯一的 2.孩子表示法 遍历能得到孩子 3.孩子兄弟表示法 节点值、指向第一个孩子节点的指针 以及 指向结点下一个兄弟结点的指针 阅读全文
posted @ 2020-04-28 21:31 天凉好个秋秋 阅读(99) 评论(0) 推荐(0)
摘要:一、由遍历序列唯一确定二叉树 中+先:可以 中:左根右;先:根左右。先序序列的第一个节点一定是二叉树的根结点,根据这个信息,再看中序序列,找到根结点,确定二叉树的 子树和右子树,再去看先序序列,它的左子树的第一个节点是左子树的根结点,递归下去,就能找到。 中+后:可以 中:左根右,后序序列:左右根。 阅读全文
posted @ 2020-04-28 13:16 天凉好个秋秋 阅读(1107) 评论(0) 推荐(0)
摘要:压缩矩阵的核心思想:值相同的元素只分配一个存储空间,零元素不分配空间。 对称矩阵:存一半 上/下三角矩阵:下三角元素相同,存一次;存一半。 三对角矩阵 稀疏矩阵:三元组存储(行坐标,列坐标,值) 阅读全文
posted @ 2020-04-28 10:38 天凉好个秋秋 阅读(513) 评论(0) 推荐(0)
摘要:如果匹配不相等的情况下,利用已经得到的“部分匹配”将模式向右滑动尽可能远的距离 阅读全文
posted @ 2020-04-28 10:35 天凉好个秋秋 阅读(92) 评论(0) 推荐(0)
摘要:栈和队列的应用 栈:括号匹配,初始化一个空栈,顺序读入括号;若是左括号,入栈;若是右括号,和栈顶的左括号得到消解 表达式求值;函数递归调用 队列:打印数据缓冲区,资源竞争请求队列 实现循环队列 逻辑上实现,当队首指针 Q.front = MaxSize - 1,再前进一个位置就为0. 好处:传统的顺 阅读全文
posted @ 2020-04-28 10:30 天凉好个秋秋 阅读(84) 评论(0) 推荐(0)
摘要:顺序表和链表 顺序表:物理顺序和逻辑顺序相同,可以随机访问; 但是删除和插入,需要移动大量元素;且需要大量连续存储空间。 链表:不再需要大量连续空间,可以动态申请分配空间。 不支持随机访问,需要额外的空间来存储指针。 判断链表是否有个环 用两个指针,slow 和 fast,slow一次走一步,fas 阅读全文
posted @ 2020-04-28 10:14 天凉好个秋秋 阅读(192) 评论(0) 推荐(0)
摘要:备注 最好时间复杂度 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性 插入排序 直接插入排序 将一个元素插入到另一有序的序列中 有序,只需要比较,O(n) O(n2) O(n2) O(1) 是 折半插入排序 有序的,顺序存储,比较的次数可以减少,但是插入的次数没有减少 一个元素折半查找是 O(l 阅读全文
posted @ 2020-04-27 17:24 天凉好个秋秋 阅读(116) 评论(0) 推荐(0)
摘要:简单选择排序 简单选择排序 VS 直接插入排序 简单选择排序是指每次从序列中选择出最小的元素,每一趟排序可以确定一个元素的最终位置。 空间复杂度:仅仅每趟交换元素,O(1) 时间复杂度:比较次数与初始状态无关,移动次数比较少 稳定:不稳定 补充说明不稳定: 序列5 8 5 2 9,我们知道第一遍选择 阅读全文
posted @ 2020-04-27 16:01 天凉好个秋秋 阅读(150) 评论(0) 推荐(0)
摘要:插入排序 1.直接插入排序 默认 L(1) 有序,将 L(2) ~ L(n)依次插入到前面已经排好序的子序列中。 空间效率:O(1) ,就地排序 时间效率:比较和移动。最好情况下,有序,只需要比较不需要移动,只要 O(n)。 平均是 O (n2) 稳定性:稳定。 适用性:均可。 2.折半插入排序 主 阅读全文
posted @ 2020-04-26 18:00 天凉好个秋秋 阅读(159) 评论(0) 推荐(0)