随笔分类 -  数据结构

摘要:1. 一个很长的二进制向量和一个映射函数 2.用于检索一个元素是否在集合中,但有一定的错误概率:通过BloomFilter的元素不一定在集合当中,但是不通过BloomFilter的元素一定不在集合当中。 3.空间和时间都远超过一般的算法 阅读全文
posted @ 2019-07-16 22:39 高圈圈 阅读(217) 评论(0) 推荐(0)
摘要:一: 源代码是这样实现的: 原来的经过一次扰动函数之后的值&数组长度: 得到所在数组下标值,相比直接^数组长度,碰撞次数少了很多 二: https://www.cnblogs.com/yesiamhere/p/6653135.html 当数组长度为2的n次幂的时候,不同的key算得得index相同的 阅读全文
posted @ 2019-05-15 17:22 高圈圈 阅读(362) 评论(0) 推荐(0)
摘要:对于完全随机的数据,普通的二分搜索树就很好用,只是在极端情况下会退化成链表。 对于查询较多的情况,avl树很好用。 红黑树牺牲了平衡性,但是它的统计性能更优(综合增删改查所有的操作)。 红黑树java实现(不完整,没有进行删除节点的操作): (默认左倾红黑树) 阅读全文
posted @ 2018-11-06 11:30 高圈圈 阅读(465) 评论(0) 推荐(0)
摘要:平衡二叉树:对于任意一个节点,左子树和右子树的高度差不能超过1 AVLMap AVLSet: 阅读全文
posted @ 2018-11-05 17:02 高圈圈 阅读(386) 评论(0) 推荐(0)
摘要:时间复杂度: O(log*n),近乎是O(1)级别的 UnionFind 接口: 第一种: 第二种: 第三种: 第四种: 第五种: 第六种: 阅读全文
posted @ 2018-11-02 21:41 高圈圈 阅读(1518) 评论(0) 推荐(2)
摘要:字典树是一种前缀树 节省空间: 压缩字典树,但是维护成本更高 三分搜索树 阅读全文
posted @ 2018-11-01 09:48 高圈圈 阅读(301) 评论(0) 推荐(0)
摘要:应用: 区间染色 区间查询 线段树不是完全二叉树,线段树是平衡二叉树 使用数组来实现线段树:存储空间为4n 以下是使用数组实现的静态线段树: 对于一个区间的更新: 懒惰更新:使用lazy数组记录未更新的内容,下一次访问时先访问lazy数组,若有内容,更新后再访问即可。 动态线段树: 使用链表实现 节 阅读全文
posted @ 2018-10-31 09:56 高圈圈 阅读(1653) 评论(0) 推荐(0)
摘要:使用数组来实现最大堆 堆是平衡二叉树 阅读全文
posted @ 2018-10-29 20:02 高圈圈 阅读(3014) 评论(0) 推荐(0)
摘要:好像也不是基于链表来实现的,而是采用与链表类似的节点形式重新定义了一个节点内部类,以此来实现映射 阅读全文
posted @ 2018-10-28 18:17 高圈圈 阅读(939) 评论(0) 推荐(0)
摘要:底层数据结构: 数组 ArrayList 链表 LinkedList 应用数据结构: 二分搜索树 BST 最大堆/最小堆 MaxHeap/MinHeap 线段树 SegmentTree 字典树 Trie 并查集 UnionFind 平衡二叉树(AVLTree、2-3Tree) 红黑树 RBTree 阅读全文
posted @ 2018-10-28 16:09 高圈圈 阅读(129) 评论(0) 推荐(0)
摘要:~ 阅读全文
posted @ 2018-10-24 22:18 高圈圈 阅读(1246) 评论(0) 推荐(0)
摘要:LikedList: 链表栈 LinkedListStack: 链表队列 LinkedListQueue: 阅读全文
posted @ 2018-10-16 22:04 高圈圈 阅读(613) 评论(0) 推荐(0)
摘要:队列: Array: 队列接口: 数组队列: 循环队列: 队列为空:front == tail 队列满:(tail+1)%data.length == front 阅读全文
posted @ 2018-10-15 21:22 高圈圈 阅读(4112) 评论(0) 推荐(0)
摘要:栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: 定义Stack接口: 定义ArrayStack: 阅读全文
posted @ 2018-10-15 17:45 高圈圈 阅读(2365) 评论(0) 推荐(1)
摘要:O(n)不一定小于O(n^2),要具体来看,而我们说的这种时间复杂度其实是渐进时间复杂度,描述的是n趋近于无穷的情况。 动态数组的时间复杂度: 添加操作:O(n) addLast()的均摊复杂度为O(1) 删除操作:O(n) 修改操作:已知索引:O(1) 未知索引:O(n) 查找操作:已知索引:O( 阅读全文
posted @ 2018-10-14 21:43 高圈圈 阅读(847) 评论(0) 推荐(0)