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

摘要:首先,BST节点的删除分为几种情况: (a)当该节点为叶子节点,则让该节点的父节点指向其变为NULL,然后释放节点; (b)当该节点不是叶子节点,但左子树或者右子树为空,则: (1)若左子树为空,则让该节点父节点指向其右节点; (2)若右子树为空,则让该节点父节点指向其左节点。 (c)当该节点不是叶 阅读全文
posted @ 2018-07-17 18:50 IvanB.G.Liu 阅读(4061) 评论(0) 推荐(0)
摘要:1. WM(Wu-Manber)算法的简单理解: (1)WM算法需要的参数: ∑:字母集 c: 字母集数目 m:模式串集合中,字符串长度最小的模式串的长度 B:字符块长度,是shift表的索引,一般取2或者3 h:当前扫描过程中长度为B的模式串子串 T:文本串 N:文本串总长度 P={P1, P2. 阅读全文
posted @ 2018-07-08 22:08 IvanB.G.Liu 阅读(4403) 评论(0) 推荐(2)
摘要:1. 定义: LRU算法,也就是最近最少使用算法,是一种用于操作系统缺页置换的算法,大概的思想是:操作系统维护一个页面单链表,新进入的页面和链表中被访问的页面移到链表头,链表满需要置换时从链表尾移除页面。 2. 程序代码: 实现LRU算法,维护一张链表,将新来的节点、访问到的节点都插入到链表的头部, 阅读全文
posted @ 2018-03-27 11:29 IvanB.G.Liu 阅读(475) 评论(0) 推荐(0)
摘要:首先,来看这样一个问题:在一个元素很多的集合中,判断某个元素是否在这个集合中。例如:有两个URL集合,每个集合中有1亿个URL字符串,每个字符串64字节,判断两个结合中重复的URL个数。如果使用Hash的方法,将所有的URL都存入hash表中,那么至多需要的内存是:2*1*10^8*64=12.8G 阅读全文
posted @ 2018-03-26 20:12 IvanB.G.Liu 阅读(326) 评论(0) 推荐(0)
摘要:在LintCode上刷题,刷到一道atoi,以为很简单,轻松写完后发现测试用例简直丧心病狂。 也许是刚开始的思路就被局限了,于是硬着头皮走上“添砖加瓦”的道路(其实就是加点if-else),最后成功AC,代码如下: 阅读全文
posted @ 2018-03-20 16:24 IvanB.G.Liu 阅读(411) 评论(0) 推荐(0)
摘要:前些日子研究了一下字符串匹配算法,突发奇想自己设计了一种新的字符串匹配算法,因为是基于BM的思想,所以暂且叫他BMY算法吧。传统的BM算法是基于坏字符规则和好后缀规则,从后向前的匹配字符串,每次发现失配时,会比较坏字符表和好后缀表,哪个对应的跳跃值大就用哪个跳跃值,这样的跳跃幅度比KMP算法要大很多 阅读全文
posted @ 2018-03-13 22:08 IvanB.G.Liu 阅读(4261) 评论(0) 推荐(1)
摘要:1. 定义: 分支限界算法是按照广度优先的方式对解空间树(状态空间树)进行搜索,从而求得最优解的算法。在搜索的过程中,采用限界函数(bound function)估算所有子节点的目标函数的可能取值,从而选择使目标函数取极值(极大值或者极小值)的节点作为扩展结点(如果限界值没有超过目前的最优解,则剪枝 阅读全文
posted @ 2018-03-03 12:36 IvanB.G.Liu 阅读(6228) 评论(1) 推荐(1)
摘要:1.定义: 回溯算法是一种在穷举查找基础上的增强变形。主要是在尝试搜索的过程中,每次只构造解的一个分量,当发现部分构造解满足求解条件时,就接受下一个分量所做的第一个合法选择;当发现部分构造解不满足求解条件时,就回溯返回,尝试另外的路径。这种走不通就回头的算法称为回溯算法。 主要思想:通过对所做的选择 阅读全文
posted @ 2018-02-26 13:32 IvanB.G.Liu 阅读(2041) 评论(0) 推荐(1)
摘要:1 动态规划的概念: 把问题转变成状态(计算机的本质就是一个状态机,内存里的各种数据构成了当前的状态,CPU只能利用当前的状态去计算下一个状态),并且将状态作为缓存进行存储,当求第 i 个阶段的最优解时,可由前 i-1 个阶段的最优解得到。动态规划的方程是: 2 动态规划的理解: 先“记忆”之前的某 阅读全文
posted @ 2018-02-25 15:37 IvanB.G.Liu 阅读(349) 评论(0) 推荐(0)
摘要:1.定义: b树是为了硬盘快速读取数据而设计的一种多路查找树。目前大多数数据库及文件索引,都是采用b树来储存实现的。一颗m阶B树满足如下性质: (1)树中每个节点至多有m颗子树,至少有ceil(m/2)颗子树 (2)树根节点至少有2颗子树 (3)所有叶节点都在同一层 (4)每个节点包括的数据形式是: 阅读全文
posted @ 2018-02-25 14:49 IvanB.G.Liu 阅读(1094) 评论(0) 推荐(0)
摘要:1. 定义: 桶排序(Bucket Sort)的基本思想是:将输入数据均匀地分配到有限数量的桶中,然后对每个桶再分别进行内部排序,最后按顺序将每个桶中的数据有序的组合起来。 2. C++程序: #include <iostream> #include <vector> using namespace 阅读全文
posted @ 2018-02-24 22:58 IvanB.G.Liu 阅读(229) 评论(0) 推荐(0)
摘要:最大深度: 最小深度: 阅读全文
posted @ 2018-02-23 22:50 IvanB.G.Liu 阅读(3380) 评论(0) 推荐(0)
摘要:二叉树的前序遍历: (1)基本原理:首先访问当前节点,然后遍历左子树,最后遍历右子树。 (2)代码实现: void preordertravel(vector<int> & vi, TreeNode *root) { if(root == NULL) return; vi.push_back(roo 阅读全文
posted @ 2018-02-23 22:48 IvanB.G.Liu 阅读(321) 评论(0) 推荐(0)
摘要:1. 定义: 平衡二叉树具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度。 2. 判断二叉树是否平衡: 1. 定义: 平衡二 阅读全文
posted @ 2018-02-20 11:37 IvanB.G.Liu 阅读(223) 评论(0) 推荐(0)
摘要:1. 二叉搜索树,又称BST。满足三个性质: (1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)它的左、右子树也分别为二叉排序树。 2. 二叉搜索树的遍历: 前序:先根节点,再左子树,后右子树 中序:先左 阅读全文
posted @ 2018-02-19 16:53 IvanB.G.Liu 阅读(168) 评论(0) 推荐(0)
摘要:1. hash表: 又称散列表,以key-value的形式存储数据,能够由key快速定位到其指定的value,而不经过查找。它采用了函数式的映射思想,将记录的存储位置与关键词相关联,从而快速定位进行查找,复杂度为O(1)。 2. hash函数: key和value的映射关系称为HASH函数,通过该函 阅读全文
posted @ 2018-02-16 16:00 IvanB.G.Liu 阅读(282) 评论(0) 推荐(0)
摘要:1. 定义: 从字面意思上理解,bitmap翻译为位图,更准确地说应该是位的映射。bitmap一般应用于海量数据的处理,如查找、去重、排序。 举个例子:40亿个int数字中,要找出只出现一次的数字集合。用普通的遍历查找的话,40亿int需要的内存空间是:40*10^8*4 = 16*10^9,即16 阅读全文
posted @ 2018-02-16 15:49 IvanB.G.Liu 阅读(983) 评论(0) 推荐(0)
摘要:1. 拓扑排序的先决条件: 图必须是一个无环有向图。序列必须满足的条件: (1)每个顶点出现且只出现一次。 (2)若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。 2.拓扑排序的思想(源删除算法): (1)选择一个没有输入边(入度为0)的源顶点(若有多个则任选 阅读全文
posted @ 2018-02-15 12:02 IvanB.G.Liu 阅读(623) 评论(0) 推荐(0)
摘要:1. 从网上找到一张归并排序的图解,如下: 可以看出,归并排序主要运用分治的思想,将要排序的数组由大化小,分别排序后再进行合并。时间复杂度是 O(nlogn)。 2. 归并排序的特点: 优点:稳定,时间复杂度是O(nlogn) (ps:所谓的稳定性是指在对元素A排序后,不会影响其他元素的相对位置。稳 阅读全文
posted @ 2018-02-15 11:44 IvanB.G.Liu 阅读(217) 评论(0) 推荐(0)
摘要:1. 快排的基本原理: (1)在数据集之中,选择一个元素作为"基准"(pivot)。 (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。 (3)对"基准"左边和右边的两个子集,不断重复上述过程,直到所有子集只剩下一个元素为止。 2. 快排的特点: 快速 阅读全文
posted @ 2018-02-14 23:57 IvanB.G.Liu 阅读(196) 评论(0) 推荐(0)