随笔分类 -  AL

摘要:前言 有时候,当你并不了解很多高级算法的时候,搜索不失为一种解决问题的好方法,而且很多高级算法有或多或少的会用到搜索或者搜索的思想。可见,搜索是一个基础并且必须要掌握的算法。 在这篇文章中,会对BFS进行一次系统的总结。好了,废话不多说,赶紧开始。 搜索里面包含了一下内容: 列表 线性搜索 二分搜索 阅读全文
posted @ 2017-03-19 17:01 banananana 阅读(16582) 评论(0) 推荐(1)
摘要:前言 "Trie树理解" ,该博客已经对Trie树进行了简要的介绍; Trie树分为静态建树和动态建树,两者的区别在于: 插入操作时,静态建树中插入不存在的结点利用的是已经创建好的大数组进行存放,而动态数组则会动态申请一个结点; 删除操作时,静态建树中删除只需将跟节点的next数组都置为空即可,而动 阅读全文
posted @ 2017-02-15 06:38 banananana 阅读(235) 评论(0) 推荐(0)
摘要:简介 实现 整数版 c include include include include using namespace std; define MAXN 100 //最大变量数量 int arr[MAXN][MAXN]; //保存增广矩阵 int result[MAXN]; //保存方程的解 int 阅读全文
posted @ 2017-02-15 06:37 banananana 阅读(560) 评论(0) 推荐(0)
摘要:前言 根据分类, 图的搜索分类 可以分为 BFS和DFS 记忆化搜索(基于深搜) 双向广搜 二分状态搜索 启发式搜索 与或树搜索 博弈树搜索(α β剪枝)(极大极小过程搜索) A 搜索 IDA搜索 先看BFS和DFS,因为这是最基础的搜索策略了,BFS是按照深度进行搜索,DFS则是按照广度进行搜索; 阅读全文
posted @ 2017-02-15 06:36 banananana 阅读(31265) 评论(0) 推荐(0)
摘要:简介 当一棵二叉树的每个结点都大于它的两个子结点时,被称为堆有序; 如果我们用指针来表示堆有序的二叉树,那么每个元素都需要三个指针来找到它的上下结点;但是如果我们使用完全二叉树,只用数组而不需要指针就可以表示; 什么是最小堆呢? 最小堆就是在二叉堆的基础上,符合了每个结点都比他的子结点要小的规则! 阅读全文
posted @ 2017-02-15 06:35 banananana 阅读(12232) 评论(0) 推荐(1)
摘要:数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 一维线段树 二维线段树 树状数组 一维树状数组 N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃 阅读全文
posted @ 2017-02-15 06:34 banananana 阅读(1171) 评论(0) 推荐(0)
摘要:来源 在没有BM算法时,其原始算法是从后往前进行匹配,需要两层循环,判断以某个字符为结尾的子串是否和模式串相等,这种算法也称作暴搜; 贴上代码: cpp void preBmBc(string x, vector& bmBc) { int i = 0; int len = (int)x.size() 阅读全文
posted @ 2017-02-15 06:33 banananana 阅读(12883) 评论(1) 推荐(0)
摘要:AVL树理解 简介 我们知道,AVL树也是平衡树中的一种,是自带平衡条件的二叉树,始终都在维护树的高度,保持着树的高度为logN,同时把 插入、查找、删除 一个结点的时间复杂度的最好和最坏情况都维持在 O(logN) ;增加和删除需要通过一次或者多次的树旋转来重新平衡这棵树。 其中规定每个结点的左子 阅读全文
posted @ 2017-02-15 06:33 banananana 阅读(380) 评论(0) 推荐(0)
摘要:简介 splay tree其实就是不停的旋转,没进行一个操作都要进行旋转;例如,当访问某一个结点的时候,会通过旋转其结点使得该结点变为树根,这样保证其的平均复杂度为O(nlogn); 其的操作包括: 查找: 如果查找成功(找到的话),那么由于伸展操作,被查找的结点成为新的树根;但是如果查找失败的话( 阅读全文
posted @ 2017-02-15 06:22 banananana 阅读(580) 评论(0) 推荐(0)
摘要:前言 Trie树又称单词查找树,字典树,是哈希树的变种; 优点在于:最大限度地减少无谓的字符串比较,查询效率比哈希高; 缺点在于:空间消耗很大; 性质 其基本性质可以归纳为: 1. 跟结点不包括字符,除跟结点以外,每个结点只包含一个字符; 2. 从跟结点到某一个结点,路径上经过的字符连接起来,为该结 阅读全文
posted @ 2017-02-15 06:19 banananana 阅读(318) 评论(0) 推荐(0)
摘要:title: Treap树理解 comments: true date: 2016 10 06 07:57:37 categories: 算法 tags: Treap树 树 Treap树理解 简介 随机平衡二叉查找树 Treap树其实就是BST+Heap,在值的比较上,按照二叉树的性质,在优先度的比 阅读全文
posted @ 2017-02-15 06:19 banananana 阅读(488) 评论(0) 推荐(0)
摘要:title: Trie树之C++实现 comments: true date: 2016 10 02 16:59:54 categories: 算法 tags: Trie树 前言 之前写了一篇偏向于理解Trie的文章- "Trie树理解" 和前面那篇文章不同的是,这一篇文章记录着Trie树的 C++ 阅读全文
posted @ 2017-02-15 06:18 banananana 阅读(566) 评论(0) 推荐(0)
摘要:Trie树的理解 Trie树又称单词查找树,字典树,是哈希树的变种; 优点在于:最大限度地减少无谓的字符串比较,查询效率比哈希高; 缺点在于:空间消耗很大; 性质 其基本性质可以归纳为: 1. 跟结点不包括字符,除跟结点以外,每个结点只包含一个字符; 2. 从跟结点到某一个结点,路径上经过的字符连接 阅读全文
posted @ 2017-01-24 11:36 banananana 阅读(272) 评论(0) 推荐(0)
摘要:前言 "Trie树理解" ,该博客已经对Trie树进行了简要的介绍; Trie树分为静态建树和动态建树,两者的区别在于: 插入操作时,静态建树中插入不存在的结点利用的是已经创建好的大数组进行存放,而动态数组则会动态申请一个结点; 删除操作时,静态建树中删除只需将跟节点的next数组都置为空即可,而动 阅读全文
posted @ 2017-01-24 11:35 banananana 阅读(1302) 评论(0) 推荐(0)
摘要:例题 以字符串 ABABACA 为例 a 前缀: 后缀: 结果为0 ab 前缀:a 后缀: b 结果为0 aba 前缀:a ab 后缀: ba a 结果为1,此时 i=2,j=1 abab 前缀:a ab aba 后缀: bab ab b 结果为2,此时 i=3,j=2 ababa 前缀:a ab 阅读全文
posted @ 2017-01-24 11:32 banananana 阅读(246) 评论(0) 推荐(0)
摘要:DFS 算法总结 这篇文章会对DFS进行一个总结,列举的题目则是从LeetCode上面选的; 适用场景: 有三个方面,分别是输入数据、状态转换图、求解目标; 输入数据 :如果是递归数据结构,如单链表,二叉树,集合,则百分之百可以使用深搜;如果是非递归数据结构,比如一维数组、二维数组、字符串、图,则概 阅读全文
posted @ 2017-01-24 11:25 banananana 阅读(7548) 评论(0) 推荐(0)