本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程
通过IP地址来查找IP归属地功能,不知道你用过没?没用过也没关系,打开百度,在搜索框里随便输入一个IP地址,就会看到它的归属地。
这个功能并不复杂,它是通过维护一个很大的IP地址库来实现。地址库中包括IP地址范围和归属地的对应关系。
当我们想要查询202.102.133.13这个IP地址的归属地时,我们就在地址库中搜索,发到IP地址落在[202.102.133.0, 202.102.133.255] 这个地址范围内,那我们就可以将这个IP地址范围对应的归属地“山东东营市”显示给用户了。
- [202.102.133.0, 202.102.133.255] 山东东营市
- [202.102.135.0, 202.102.136.255] 山东烟台
- [202.102.156.34, 202.102.157.255] 山东青岛
现在我的问题是,在庞大地址库中逐一比对IP地址所在的区间,是非常耗时的。假设我们有12万条这样的IP区间与归属地的对应关系,如何快速出一个IP地址的归属地呢?
学完今天的内容,你就会发现这个问题其实很简单。
上一节我讲了二分查找的原理,并且介绍了最简单的一种二分查找的代码实现。今天我们来讲几种二分查找的变形问题。
需要特别说明的一点,为了简化讲解,今天的内容,我都以数据从小到大排列为前提,如果要处理的数据是从大到小,解决的思路也是一样的。