算法数据结构
文章平均质量分 79
苏丛JS
这个作者很懒,什么都没留下…
展开
-
Java 哈希函数 哈希表 动态容量 链地址法 简介+实现
简介哈希函数整型浮点型字符串型Java 中的hashCode()实现简介实现哈希表有两个主要的问题, 一个是解决哈希函数的设计, 一个是哈希冲突的处理哈希函数键通过哈希函数可以得到一个索引, 通过索引可以在内存中找到这个键所包含的信息, 索引的分布越均匀冲突才越少所有类型的数据, 包括浮点型, 字符型的都可以转化为整型, 然后用整型的哈希函数计算哈希函数的设计要遵循一些原则:一致性: 如果 a == b, 则 hash(a) == hash(b)高效性: 计算高效简便均匀性: 哈希值均.原创 2020-07-06 22:20:56 · 854 阅读 · 0 评论 -
2-3树 红黑树 简介+实现
2-3树从根节点到任意一个叶子节点经过的节点数量算法导论 中的红黑树:红黑树是一棵具有下列特性的二分搜索树:每个节点或者是红色, 或者是黑色根节点是黑色的每一个叶子节点 (这里的叶子节点指最后的空节点) 是黑色的如果一个节点是红色的, 那么他的孩子节点都是黑色的从任意一个节点到叶子节点, 经过的黑色节点是一样的...原创 2020-07-04 20:14:46 · 597 阅读 · 0 评论 -
AVL 平衡二叉搜索树 支持键值 简介+实现
为什么要平衡什么是平衡平衡因子不平衡的情况和平衡的方法LLRRLRRL删除操作实现为什么要平衡一般的搜索树, 如果元素是顺序加入的话, 那么这棵树就会退化成链表什么是平衡对于任意一个节点, 左右子树的高度差不超过1的树就是平衡二叉树, 比如下面这棵树height表示高度, 父节点的高度是左右子节点中最大的那个高度加一平衡二叉树的高度和节点数之间的关系是 O(log n)的因为每次加入新的节点, 都要看节点的高度, 所以节点的结构如下class Node{ key; // 用来统.原创 2020-07-04 01:22:49 · 342 阅读 · 0 评论 -
并查集 Union Find 路径压缩 简介+实现
简介适用于: 可以解决连接问题, 查看网络中的节点的连接状态(比通过求两个网络的路径来看连接状态效率高); 求两个集合的并集合并和查找指向同一个根节点的节点在同一个集合并查集和其他树相比比较特殊的一点是: 其他的树都是从父节点指向子节点, 并查集是子节点指向父节点一开始5个节点都自成一个集合, 他们的父节点是自己如果合并1, 2 (执行union(1, 2)), 就把节点2作为节点1的父节点, 节点1指向节点2合并节点3, 4(union(3, 4), 之后再合并节点4, 5(union原创 2020-06-19 12:53:37 · 2255 阅读 · 0 评论 -
Trie 前缀树 字典树 简介+实现
简介最上面的是根结点, 这棵树中存的单词是apple, app, all, bat, 如果IsWord为True, 就说明从根节点连到这个结点的字母组成的是一个单词使用前缀树查询的时候时间复杂度只和单词的长度相关实现import java.util.TreeMap;/** * 存储只包含26个字母的单词 */public class Trie { private class Node{ public boolean isWord; // 是否是一个单词原创 2020-06-18 10:16:18 · 143 阅读 · 0 评论 -
线段树 区间树 简介+实现
简介适用于: 要考虑区间相关的统计信息, 且数据是动态更新的使用线段树查询或者更新时间复杂度都是 O(logn)线段树都是平衡二叉树, 但不一定是完全二叉树比如要存储下面这个数组data, 我们的目的是要求这个数组任意区间的和存储结构是这样的因为这是平衡二叉树, 所以我把它保存在数组tree中, 其中TreeIndex: 在tree数组中的索引l: 在data数组中的左边界r: 在data数组中的右边界TreeValue: 可以是这个data数组的[l…r]区间的和, 最大值, 最原创 2020-06-17 19:59:54 · 455 阅读 · 0 评论 -
最大堆 和 优先队列
最大堆MaxHeap.javaimport java.util.Random; // 后面测试用public class MaxHeap<E extends Comparable<E>> { private Array<E> data; public MaxHeap(int capacity){ data = new Array<>(capacity); } public MaxHeap(){原创 2020-06-13 01:23:38 · 237 阅读 · 0 评论 -
蓝桥杯 黄金连分数 斐波那契数列 C++
黄金分割数0.61803… 是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物,其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!!言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。比较简单的一种是用...原创 2020-05-01 21:32:30 · 632 阅读 · 0 评论