问答题参考解法: 题目大意:给你一个ipv4地域库(ipv4地址的网段表示法,比如12.34.56.0/24,对应相应地理位置的表),保证各个网段互不重叠,但是一个地域可以对应多个网段。请设计一个数据结构,能过快速地查询用户询问的ip所对应的地理位置。请说明你的方法的时空复杂度。 参考解法: 计算机中ipv4地址是32位无符号整数。 我们将ipv4的地址和网段都变成32位无符号整数,然后转换成对应的32位的二进制表示。 之后使用字典树/键树/Trie(二叉树也可以),每个节点有2个分支:一个分支表示下一位是0,另一个分支表示下一位是1. 首先要将所有地域库的信息插入这个树中。对网段,保留相应的掩码长度,在掩码长度最后一位对应的节点,顺带标记上,这是一个网段节点,对应的地域为xxx。 插入完成之后,我们可以处理查询。对每个查询,转成32位的01串,在树上,根据每一位的具体值,决定往下走到哪个节点,来进行查找。当走到某个节点,走不下去的时候: 如果这个节点没有地域信息,说明库中没有对应条目。 如果这个节点有地域信息,说明我们找到了,返回这个地域信息。 综上所述: 插入阶段: 时间复杂度O(32n)=O(n) 空间复杂度O(32n)=O(n) 其中n为地址库中的地址数目 查询阶段: 时间复杂度O(32)=O(1) 空间复杂度O(1)
点赞 评论

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
牛客网
牛客企业服务