二分查找(下):如何快速定位IP对应的省份地址?

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程

通过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地址的归属地呢?

学完今天的内容,你就会发现这个问题其实很简单。

上一节我讲了二分查找的原理,并且介绍了最简单的一种二分查找的代码实现。今天我们来讲几种二分查找的变形问题。在这里插入图片描述
需要特别说明的一点,为了简化讲解,今天的内容,我都以数据从小到大排列为前提,如果要处理的数据是从大到小,解决的思路也是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值