随笔分类 -  算法

摘要:动态规划在编程中有着广泛的应用,对于某些问题我们可以通过动态规划显著的降低程序的时间复杂度。本质上动态规划并不是一种算法,而是解决一类问题的思想。本篇博客通过一些非常简单而又经典的问题(比如数塔、0-1背包、完全背包、走楼梯问题、最长公共子序列等)来帮助大家理解动态规划的一般套路。 欢迎探讨,如有错 阅读全文
posted @ 2019-06-08 18:19 nullzx 阅读(7022) 评论(4) 推荐(8) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 我们首先提一个问题, B+树比平衡二叉树在索引数据方面要快么? 大多数人可能认为肯定还是B+树快,毕竟存储同样多的数据,100阶的B+树肯定比平衡二叉树的高度要低的多。但是别忘了B树在一个 阅读全文
posted @ 2018-05-02 00:04 nullzx 阅读(9544) 评论(5) 推荐(8) 编辑
摘要:简介:本文主要介绍了B树和B+树的插入、删除操作。写这篇博客的目的是发现没有相关博客以举例的方式详细介绍B+树的相关操作,由于自身对某些细节也感到很迷惑,通过查阅相关资料,对B+树的操作有所顿悟,写下这篇博客以做记录。由于是自身对B+树的理解,肯定有考虑不周的情况,或者理解错误的地方,请留言指出。 阅读全文
posted @ 2018-04-06 23:30 nullzx 阅读(194771) 评论(40) 推荐(110) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 二分搜索使用的前提是数组必须有序,在本文中,我们用lo(low)表示查找范围的起始下标,hi(hight)表示查找范围的结束下标,mid表示lo和hi的中间位置。 1. 一般情况二分搜索 阅读全文
posted @ 2018-02-08 21:04 nullzx 阅读(615) 评论(0) 推荐(1) 编辑
摘要:简介: 割边和割点的定义仅限于无向图中。我们可以通过定义以蛮力方式求解出无向图的所有割点和割边,但这样的求解方式效率低。Tarjan提出了一种快速求解的方式,通过一次DFS就求解出图中所有的割点和割边。 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 割点与桥(割边)的定义 在无向图中才有割边和割点的定义 割点:无向连通图... 阅读全文
posted @ 2017-12-04 00:19 nullzx 阅读(28957) 评论(11) 推荐(25) 编辑
摘要:简介: 本文主要介绍基于分治方式(递归)和枚举方式(循环)来构建指定字符串的全排列方法,两种方法都可以解决重复元素的全排列 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 基于分治方式(递归实现) 1)一个元素的全排列只有一种 2 阅读全文
posted @ 2017-10-22 23:57 nullzx 阅读(10538) 评论(0) 推荐(0) 编辑
摘要:简介: 本文是博主自身对AC自动机的原理的一些理解和看法,主要以举例的方式讲解,同时又配以相应的图片。代码实现部分也予以明确的注释,希望给大家不一样的感受。AC自动机主要用于多模式字符串的匹配,本质上是KMP算法的树形扩展。这篇文章主要介绍AC自动机的工作原理,并在此基础上用Java代码实现一个简易 阅读全文
posted @ 2017-09-09 21:32 nullzx 阅读(25659) 评论(15) 推荐(7) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 优先队列与索引优先队列 优先队列的原理大家应该比较熟悉,本质上就是利用完全二叉树的结构实现以log2n的时间复杂度删除队列中的最小对象(这里以小堆顶为例)。完全二叉树又可以通过数组下 阅读全文
posted @ 2017-03-26 23:33 nullzx 阅读(8509) 评论(5) 推荐(10) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 算法的原理 以源点开始,以源点相连的顶点作为向外延伸的顶点,在所有这些向外延伸的顶点中选择距源点最近的顶点(如果有多个距离最近的顶点,任意选择一个即可)继续向四周延伸(某个顶点被选作 阅读全文
posted @ 2017-03-14 13:00 nullzx 阅读(3820) 评论(1) 推荐(0) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 定义 连通分量:在无向图中,即为连通子图。 上图中,总共有四个连通分量。顶点A、B、C、D构成了一个连通分量,顶点E构成了一个连通分量,顶点F,G和H,I分别构成了两个连通分量。 强 阅读全文
posted @ 2017-02-24 11:54 nullzx 阅读(41345) 评论(11) 推荐(13) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 相关博客: 从2-3-4树到红黑树(上) 从2-3-4树到红黑树(中) 1. 实现技巧 为了简化代码和减少不必要的开销,在具体的实现中我们定义一个伪根节点ROOT且只定义一个NIL节点。伪 阅读全文
posted @ 2016-12-17 19:53 nullzx 阅读(2976) 评论(4) 推荐(0) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 相关博客: 从2-3-4树到红黑树(上) 从2-3-4树到红黑树(下) 1. 红黑树的定义 2-3-4树和红黑树是完全等价的,由于绝大多数编程语言直接实现2-3-4树会非常繁琐,所以一般是 阅读全文
posted @ 2016-12-03 12:41 nullzx 阅读(9050) 评论(1) 推荐(4) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 相关博客: 从2-3-4树到红黑树(中) 从2-3-4树到红黑树(下) 1. 2-3-4树的定义 2-3-4树是一种阶为4的B树。它是一种自平衡的数据结构,可以保证在O(lgn)的时间内完 阅读全文
posted @ 2016-11-28 20:19 nullzx 阅读(11760) 评论(5) 推荐(10) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. AVL定义 AVL树是一种改进版的搜索二叉树。对于一般的搜索二叉树而言,如果数据恰好是按照从小到大的顺序或者从大到小的顺序插入的,那么搜索二叉树就对退化成链表,这个时候查找,插入和删除的时间都会上升到O(n),而这对于海量数据而言,是我们无法忍受的。即使是一颗由完全随机的数据构造... 阅读全文
posted @ 2016-11-17 21:47 nullzx 阅读(3455) 评论(2) 推荐(0) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 简易版本TimSort排序算法原理与实现 TimSort排序算法是Python和Java针对对象数组的默认排序算法。TimSort排序算法的本质是归并排序算法,只是在归并排序算法上进行 阅读全文
posted @ 2016-10-30 23:47 nullzx 阅读(4262) 评论(0) 推荐(0) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 归并排序算法的使用情景 归并排序算法和快速排序算法是java.util.Arrays中使用的排序算。对于一般的基本数据类型,Arrays.sort函数使用双轴快速排序算法,而对于对象类 阅读全文
posted @ 2016-10-16 23:17 nullzx 阅读(12961) 评论(3) 推荐(7) 编辑
摘要:欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 单轴快速排序的基本原理 快速排序的基本思想就是从一个数组中任意挑选一个元素(通常来说会选择最左边的元素)作为中轴元素,将剩下的元素以中轴元素作为比较的标准,将小于等于中轴元素的放到中轴元素的左边,将大于中轴元素的放到中轴元素的右边,然后以当前中轴元素的位置为界,将左半部分子数组和右半... 阅读全文
posted @ 2016-09-18 00:49 nullzx 阅读(21039) 评论(6) 推荐(11) 编辑