位图 问题 问题1:如何实现网页爬虫中url去重功能? 分析 传统数据结构散列表、红黑树、跳表这些动态数据结构,都能支持快速地插入、查找数据。 但通常爬虫爬取的网页数量级都比较大,假设为10亿个网页,估算一下散列表存储所需的内存: 为了判重,我们把这 10 亿网页链接存储在散列表中。 假设一个 UR ...
分类:
编程语言 时间:
2020-01-08 21:02:20
阅读次数:
121
树的基本概念、特点。 二叉树的定义、概念、特点。 二叉树的遍历顺序:前序DLR、中序LDR、后序LRD(递归与迭代);层序遍历(迭代) 树的操作:插入、删除、查询、遍历、旋转等 树、森林、二叉树的关系 树的应用:哈夫曼树、红黑树、AVL树、B(B+)树、Treap树、Trie树(字典树)、伸展树、替 ...
分类:
其他好文 时间:
2020-01-08 12:40:38
阅读次数:
120
在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8 ...
分类:
其他好文 时间:
2020-01-08 10:32:13
阅读次数:
65
红黑树详解 1.为什么需要红黑树? 对于二叉搜索树,如果插入的数据是随机的,那么它就是接近平衡的二叉树,平衡的二叉树,它的操作效率(查询,插入,删除)效率较高,时间复杂度是O(logN)。但是可能会出现一种极端的情况,那就是插入的数据是有序的(递增或者递减),那么所有的节点都会在根节点的右侧或左侧, ...
分类:
其他好文 时间:
2020-01-06 09:34:59
阅读次数:
78
public class RBNodeDemo { public static void main(String[] args) { RBNode<Integer> node1 = new RBNode<>(1); RBNode<Integer> node2 = new RBNode<>(2); R ...
分类:
其他好文 时间:
2020-01-06 00:20:07
阅读次数:
76
慢查询解决:使用索引 索引是帮助Mysql高效获取数据的排好序的数据结构常见的存储数据结构:二叉树 二叉树不适合单边增长的数据红黑树(又称二叉平衡树) 红黑树会自动平衡父节点两边的节点数B+树 Mysql底层用的是B+树 非叶子节点不存储data(data在Mysql中有可能是查询目标行的所有数据)... ...
分类:
数据库 时间:
2020-01-03 19:23:36
阅读次数:
90
4.1 元素删除 约定: 删除一个结点z,如果有该结点有子结点,需要查找该结点的左树最大值y来替换,同时又需要用叶结点x来替换y的位置。 在二叉树中删除一个结点有以下几种情况,以删除红结点为例,删除黑结点也差不多,最重要的多必须检查代替的结点是不是子结点,是不是黑结点。 Tip: 算法导论中谈到找右 ...
分类:
其他好文 时间:
2020-01-03 09:14:24
阅读次数:
106
1. 简介 红黑树是一种自平衡二叉查找树,在查找,插入和删除几个方面,性能都可以做到O(lgN)。 那怎么实现呢,首先要先看看红黑树的5个特性,只有满足这5个特性,才是红黑树。 每个结点都有父结点(parent),左子结点(left)和右子结点(right), root的父结点是leaf结点。 下图 ...
分类:
其他好文 时间:
2020-01-02 22:39:39
阅读次数:
91
mysql索引数据结构选择的是B+树。以下列出可选用的数据结构,和他们所存在的一些缺点。 二叉树(如果是线性增长的数据,则二叉树会一直增加深度)红黑树 (虽然红黑树解决了线性增长的数据问题,但是对于百万数据来说,树的深度还是太深)hash表(hash算法这种适用于查询单条数据,根据key-value ...
分类:
数据库 时间:
2020-01-02 18:53:24
阅读次数:
89
红黑树 红黑树仍然是一颗二分搜索树,和AVL一样,都是在二分搜索树的基础上加了一些限制条件:具体的5个限制条件如下: 1) 每个节点或者是红色的,或者是黑色的 2) 根节点是黑色的 3) 每一个叶子节点(最后的空节点叫叶子节点)是黑色的 4) 如果有一个节点是红色的,那么它的两个孩子节点都是黑色的 ...
分类:
其他好文 时间:
2020-01-01 19:00:19
阅读次数:
75