【数据结构】
天青色的烟雨.
本博客只为加深自身知识体系,不为任何商业用途呦呦呦!
展开
-
二叉树、红黑树、B树、B+树
一、二叉查找树 二叉搜索树(BST)又称二叉查找树或二叉排序树。一棵二叉搜索树是以二叉树来组织的,可以使用一个链表数据结构来表示,其中每一个结点就是一个对象。一般地,除了key和卫星数据(文末附注1)之外,每个结点还包含属性lchild、rchild和parent,分别指向结点的左孩子、右孩子和双亲(父结点)。如果某个孩子结点或父结点不存在,则相应属性的值为空(NIL)。根结点是树...原创 2019-03-16 12:04:37 · 1589 阅读 · 0 评论 -
SkipList跳表原理
为什么选择跳表 目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树,出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB...转载 2019-04-08 09:23:56 · 261 阅读 · 0 评论 -
哈夫曼树
定义 我们希望建立这样一株二叉树,其叶结点为一组给定的带权结点,称这个树的权重为每个叶子结点到根结点的距离与其权值的乘积的累和,即: 其中x.w表示叶结点的权重,而x.d为叶结点的深度。哈夫曼树是所有满足上面条件的二叉树中权重最小的。哈夫曼树的构造算法(心里默念:把每个叶节点按照权值的大小,先把最小的两个叶节点构成一个父节点是他们之和的小二叉树,在以父节...转载 2019-07-05 16:15:11 · 824 阅读 · 0 评论 -
堆和优先级队列(PriorityQueue)
1. 堆的概念堆逻辑概念上是一棵完全二叉树,而物理存储上使用数组,还要一定的顺序要求。 TreeMap内部使用的是排序二叉树原理,排序二叉树是完全有序的,每个节点都有确定的前驱和后继,而且不能有重复元素。与排序二叉树不同,在堆中,可以有重复元素,元素间不是完全有序的,但对于父子节点直接,有一定的顺序要求。根据顺序分为两种堆:最大堆、最小堆堆是一种特殊的树,一个堆需要满足如...转载 2019-06-30 17:13:19 · 1611 阅读 · 0 评论 -
二叉树的遍历
递归的本质是通过栈来保存状态,然后再次调用自己进入新的状态,然后函数返回的时候回到上次保存的状态。往往机器保存的状态不一定用得到,这就会造成栈资源浪费。所以要把递归改为非递归,这样自己可以设置需要保存的状态,减少栈空间的浪费。//树的节点类class Node { public int val; //节点值 public Node left; //左子树 public...原创 2019-06-30 14:59:29 · 204 阅读 · 0 评论 -
算法的时间复杂度
通常,对于一个给定的算法,我们要做两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。...原创 2019-06-29 11:54:13 · 535 阅读 · 0 评论 -
一致性哈希
一、分布式算法 在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法. 典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡...转载 2019-07-03 17:22:24 · 248 阅读 · 0 评论 -
布隆过滤器
布隆过滤器介绍布隆过滤器在wiki上的介绍: 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难为什么要用布隆过滤器? HashMap 的问题: 讲述布隆过滤器的原理之前,我...转载 2019-07-03 15:31:08 · 1266 阅读 · 0 评论 -
散列(哈希)
1、为什么有哈希 对于线性表、队列、树这些数据结构,它们的记录在结构中是随机的,而且和记录的关键字之间并不存在确定关系,查找某个元素时需要进行一系列与关键字的比较,即这种查找是建立在“比较”的基础上。所以查找的效率依赖于比较的次数,那么如何才能不经过比较直接找到记录所在位置呢?刚才说到上述数据结构的关键字与记录位置之间是不存在确定关系的,那么我们可以让这两者之间建立一种确定关系,也...转载 2019-07-03 10:16:14 · 828 阅读 · 0 评论 -
排序算法
排序算法比较表格排序算法的稳定性:排序前后相同元素的相对位置不变,则称排序算法是稳定的;否则排序算法是不稳定的。一、冒泡排序1、算法思想两两比较,如果后者比前者大则交换位置 每遍历一圈最大的数就会冒到最后,则确定了本轮比较中的最大值放到最后不动 循环1、2直至遍历完所有时间复杂度O(n²)private int[] array = {23, 11, 7, 29,...转载 2019-04-09 22:01:27 · 189 阅读 · 0 评论 -
背包问题
1、0 1背包问题题目:有N件物品和一个容量为V的背包。第i件物品的费用是w[i],价值是p[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[...原创 2019-08-07 22:10:55 · 749 阅读 · 0 评论