【问题标题】:Data Structure for Mapping IP to City将 IP 映射到城市的数据结构
【发布时间】:2013-04-14 21:14:38
【问题描述】:

我正在阅读来自不同公司的面试问题,我遇到了这个问题:

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 范围不重叠。

有人对此有更好的解决方案吗?

【问题讨论】:

    标签: performance algorithm data-structures


    【解决方案1】:

    您可以将 IP 地址存储为 32 位,因此只需将它们转换为整数,然后将 (IP, City) 对存储在任何 balanced BSThash table 中,其中密钥是 IP。以这种方式,查找复杂度将是对数或恒定的。

    【讨论】:

    • 对于整数键,整数键的映射比基于比较的 BST 更有效,例如尝试树和 van Emde Boas 树。
    【解决方案2】:

    您可以为每个虚线部分创建一个树结构,叶节点将是城市

    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 将是柏林

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 2010-09-05
      • 2023-03-22
      • 2012-03-23
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多