_

二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储? 树(Tree) A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。B、C、D 这三个节点的父节点是同一个节点,所以它们之间...

哈希算法

哈希算法将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值 优秀的哈希算法需要满足的几点要求: 从哈希值不能反向推导...

散列表

散列表散列表(Hash Table),也叫“哈希表”或者“Hash 表” 散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,...

跳表

跳表 假设每两个节点建立一个索引 对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫做跳表(Skip list) Redis 中的有序集合(Sorted Set)就是...

二分查找

二分查找二分查找(Binary Search)算法,也叫折半查找算法 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半...

Mysql45讲-实践(四)

自增主键为什么不是连续的?自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。 自增主键不能保证连续递增 1234567CREATE TABLE `t` ...

递归

如何理解“递归”?递归需要满足的三个条件 一个问题的解可以分解为几个子问题的解 子问题就是数据规模更小的问题 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 存在递归终止条件...

队列

队列:队列在线程池等有限资源池中的应用CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致 CPU 频繁切换,处理性能下降。 当我们向固定大小的线程池中请...

栈:如何实现浏览器的前进和后退功能? 当你依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a。当你后退到页面 a,点击前进按钮,就可以重新查看页面...

链表

如何实现LRU缓存淘汰算法?缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。 缓存的大小有限,当缓存被用满时,...

数组

参考学习自·数据结构与算法之美 数组:为什么很多编程语言中数组都从0开始编号?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表(Linea...

复杂度分析

参考学习自·数据结构与算法之美 事后统计法 这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。 局限性: 测试结果非常依...

12346