算法与数据结构
文章平均质量分 80
算法和数据结构相关
pys789
这个作者很懒,什么都没留下…
展开
-
布隆过滤器简介
一、概念 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。二、原理1、添加和查询下图以添加 A,B 两个元素为例:使用 hash1,hash2,hash3 3个哈希函数映射当一个元素加入布隆过滤器中的时候,会使用 k 个哈希函数对其进行k次计算,得到 k 个哈希值,并且根据...原创 2021-03-21 16:11:57 · 136 阅读 · 0 评论 -
二分查找算法解析
我周围的人几乎都认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?并不简单。看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的:Although the basic idea of binary search is comparatively straightforward, the details can be surprisingly tricky...这句话可以这样理解:思路很简单,细节是魔鬼。本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找...转载 2020-11-09 19:08:57 · 159 阅读 · 0 评论 -
十大排序算法
一、概述1、排序的定义对一序列对象根据某个关键字进行排序。2、术语稳定性:如果 a 等于 b,a 排在 b 的前面,排序后 a 一定仍然在 b 的前面,那么当前排序算法是稳定算法,否则就不是稳定算法。原地算法:不依赖额外的资源或者依赖少数的额外资源,仅依靠输出来覆盖输入,空间复杂度为 O(1)的都可以认为是原地算法。3、分类4、复杂度名称 时间复杂度 额外空间复杂度 原地算法 稳定性 最好 最坏 平均 冒泡排序 O(n)原创 2020-07-11 12:37:07 · 183 阅读 · 0 评论 -
二叉堆小结
一、简介堆是一棵具有特定性质的二叉树。如果任意节点的值总是 >= 子节点的值,称为:最大堆,大根堆,大顶堆 如果任意节点的值总是 <= 子节点的值,称为:最小堆,小根堆,小顶堆除此以外,所有叶子结点都是处于第 h 或 h - 1层(h为树的高度),堆是一个完全二叉树。基本接口定义如下:public interface Heap<E> { int size(); // 元素的数量 boolean isEmpty(); // 是否为空 void clear();原创 2020-06-26 19:17:55 · 357 阅读 · 0 评论 -
红黑树小结
红黑树是一种常用的数据结构,例如:Java 的TreeMap,TreeSet,HashMap,HashSet Linux 的进程调度 Nginx 的timer管理红黑树可以类比 4 阶 B 树去分析,下面简述一下 B 树的性质一、B 树下图就是一个 4 阶 B 树m 阶 B 树有如下性质:...原创 2020-05-30 23:10:59 · 193 阅读 · 0 评论 -
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 · 390 阅读 · 1 评论 -
线性表
常见的线性表有数组 链表 栈 队列 哈希表(散列表)原创 2020-05-10 11:49:38 · 269 阅读 · 0 评论