/images/hugo/avatar.png

14 散列表

散列表原理

1. 特性

散列表是数组的一种扩展,利用的是数组支持按照下标随机访问的特性,其由三个核心部分组成:

  1. key: 元素的键
  2. hash func: 散列函数,将键隐射为底层数组的下标
  3. table: 底层的数组

/images/algo/hash/hash_map.jpg

13 跳表

跳表: 链表上的“二分查找”

1. 特性

跳表是一种动态数据结构,支持快速的插入、删除、查找操作,时间复杂度都是 O(logn)。实现上跳表使用空间换时间的思想,通过构建多级索引来提高查询的效率,实现了基于链表的“二分查找”。

27.4 varnish缓存策略配置

varnish缓存策略配置

/images/linux_mt/linux_cache.jpg

前面我们讲解了 VCL 的语法,并通过示例讲解了一部分 varnish 缓存的配置。本节我们来看看 varnish 内置的缓存策略,然后着重来看看如何对缓存进行修剪。

11 映射

无处不在的映射

1. 映射

前面我们讲解了基于数组和链表最基础的数据结构。在继续下面的内容之前,我们先来说一说映射。因为映射与我们接下来的很多数据结构与算法相关。映射可以看作是搜索或查找的扩展,后面介绍的很多数据结构都是为实现快速的增删改查。因此在继续其他数据结构的介绍之前,我想先介绍一下映射的抽象数据类型以及它的常见几种实现方式。

12 二分查找

/images/algo/binary_search/binary_image.jpg 不简单的简单二分查找

1. 特性

二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。