- 博客(8)
- 资源 (4)
- 收藏
- 关注
原创 布隆过滤器简介
一、概念 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 二、原理 1、添加和查询 下图以添加 A,B 两个元素为例:使用 hash1,hash2,hash3 3个哈希函数映射 当一个元素加入布隆过滤器中的时候,会使用 k 个哈希函数对其进行k次计算,得到 k 个哈希值,并且根据...
2021-03-21 16:11:57
193
转载 二分查找算法解析
我周围的人几乎都认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?并不简单。看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的: Although the basic idea of binary search is comparatively straightforward, the details can be surprisingly tricky... 这句话可以这样理解:思路很简单,细节是魔鬼。 本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找...
2020-11-09 19:08:57
231
原创 十大排序算法
一、概述 1、排序的定义 对一序列对象根据某个关键字进行排序。 2、术语 稳定性:如果 a 等于 b,a 排在 b 的前面,排序后 a 一定仍然在 b 的前面,那么当前排序算法是稳定算法,否则就不是稳定算法。 原地算法:不依赖额外的资源或者依赖少数的额外资源,仅依靠输出来覆盖输入,空间复杂度为 O(1)的都可以认为是原地算法。 3、分类 4、复杂度 名称 时间复杂度 额外空间复杂度 原地算法 稳定性 最好 最坏 平均 冒泡排序 O(n)
2020-07-11 12:37:07
255
原创 Tomcat 概述
一、简介 Servlet 简单理解为运行在服务端的 Java 小程序,但是 Servlet 没有 main 方法,不能独立运行,因此必须把它部署到 Servlet 容器中,由容器来实例化并调用 Servlet。而 Tomcat 就是一个 Servlet 容器。为了方便使用,它也具有 HTTP 服务器的功能,因此 Tomcat 就是一个“HTTP 服务器 + Servlet 容器”,我们也叫它们 Web 容器。 1、协议 在集群架构中,为了提高效率,Web 服务器和 Tomcat 进程之间的协议不是..
2020-07-01 16:29:58
371
原创 二叉堆小结
一、简介 堆是一棵具有特定性质的二叉树。 如果任意节点的值总是 >= 子节点的值,称为:最大堆,大根堆,大顶堆 如果任意节点的值总是 <= 子节点的值,称为:最小堆,小根堆,小顶堆 除此以外,所有叶子结点都是处于第 h 或 h - 1层(h为树的高度),堆是一个完全二叉树。基本接口定义如下: public interface Heap<E> { int size(); // 元素的数量 boolean isEmpty(); // 是否为空 void clear();
2020-06-26 19:17:55
410
原创 红黑树小结
红黑树是一种常用的数据结构,例如: Java 的TreeMap,TreeSet,HashMap,HashSet Linux 的进程调度 Nginx 的timer管理 红黑树可以类比 4 阶 B 树去分析,下面简述一下 B 树的性质 一、B 树 下图就是一个 4 阶 B 树 m 阶 B 树有如下性质: ...
2020-05-30 23:10:59
243
原创 AVL 树小结
一、背景 1、问题 例如:在 n 个动态的整数中搜索某个整数是否存在? 0 1 2 3 4 5 6 7 8 9 31 66 17 15 28 20 59 88 45 56 如果维护一个有序的动态数组,使用二分搜索,最坏时间复杂度:O(logn) 但是添加,删除的平均时间复杂度是O(n) 针对这个需求,有没有更好的方案? 使用二叉搜索树,添加,删除,搜索的最坏时间复杂度均可优化至:O
2020-05-29 00:01:40
463
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人