我正在阅读来自不同公司的面试问题,我遇到了这个问题:
You are given a fixed file. The format of each line is city name, ip address
range. Construct a data structure and design algorithm to achieve efficient
mapping from an ip address to city name.
我认为可行的一种方法是工作,虽然在线性时间内是一个简单的链接列表,你可以获得给定范围的起始IP,你拥有城市的节点和范围内的最终IP。
因此,在查找内容时,您将遍历列表并检查开始和结束IP地址,以查看给定的IP是否在任何范围内。
这假设IP范围不重叠。
有人有更好的解决方案吗?
答案 0 :(得分:2)
您可以存储32位的IP地址,因此只需将它们转换为整数,然后将(IP, City)
对存储在密钥为IP的任何balanced BST或hash table中。查找复杂性将以对数或常量为单位。
答案 1 :(得分:0)
您可以为每个虚线部分创建树结构,叶节点将是城市
Root
|
[0-13] [14-255]
| |
[0-255] [0-173], [174-255]
| | |
[0-255] [0-255] [0-255]
| | |
[0-255] [0-255] [0-255]
| | |
London Belfast Berlin
等。然后地图一个地址到一个你刚走过树的城市,所以14.183.1.123将是柏林