查找算法 - 二分查找案例剖析-IP地址对应城市查询

- 1 min

数据结构与算法系列(十七)

今天我们来分享一个二分查找的实际使用案例 —— 根据用户的 IP 地址,获取用户所在的城市。

记得我以前面试的时候,就遇到过这个问题,没错,这个背后就是通过二分查找来实现的。

我们知道每个城市都有对应的 IP 地址段,这个在网上搜一下就能拿到。然后我们可以将这些不同城市 IP 地址段起始值转化为整型数字(转化函数Google/百度搜下就能找到),进而对其进行排序,就可以得到一个有序的序列。比如杭州和北京,IP区间分别是[183.128.0.0,183.159.255.255] 和 [110.96.0.0,110.127.255.255],转化为数字后对应区间分别是[3078619136,3080716287] 和 [1851785216,1853882367],这样,就可以对这两个区间起始值排序为 [1851785216,3078619136]。

此外我们还需要存储每个区间值对应的城市,以便找到对应位置后可以快速定位对应城市,我们可以把这个映射关系存储到数据库里面,存储字段包括城市、起始IP、结束IP,这里有一个前提是不同城市区间值不可能交叉,否则没法玩。

接下来就是二分查找排上用场的时候了,我们将待查找 IP 转化为数字,然后在排序序列中查找最后一个起始 IP 小于等于待查找 IP 的位置,通过该起始 IP 在数据库中定位到对应记录,判断待查找 IP 是否在这个 IP 区间范围内,如果在的话则返回对应城市,不在的话,就返回没找到。

如果你在面试的时候遇到这个问题,也就可以从容作答了。

一般来说,全国城市IP地址段至少在几十万级别,通过二分查找带来的性能提升还是很显著的

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora