【发布时间】:2017-08-07 19:09:19
【问题描述】:
我正在尝试考虑一种有效的数据结构,可用于将 IPv6 地址范围存储到其中。查找时间应该很快。也就是说,给定一个 IPv6 地址,我应该能够快速确定它来自哪个时间间隔。就我而言,地址范围不会重叠。
一种有效的方法是创建一个简单的二叉搜索树,每个非叶节点只是“重定向查找流量”。然而,这种方法的问题是 BST 的大小会非常大,可能大约为 2^128 个节点,我可能无法读取/写入文件。
那么,我可以使用什么数据结构进行快速 IPv6 地址查找,该数据结构也具有文件大小的下限???
顺便说一句,我正在使用 Java。
【问题讨论】:
-
可以使用第三方库吗? Guava 的 RangeSet 很适合这个。
-
如果范围不重叠,您可以使用哈希表。
-
不是我的专业领域,但是...... Postgres 数据库内置了原生data types for network addresses,提供functions for working with such addresses,我猜可以执行范围搜索。
-
我们可以只对区间进行排序并进行二分查找吗?
标签: java algorithm networking optimization data-structures