Patricia Trie用于快速检索IPv4地址和卫星数据

时间:2012-10-03 13:41:47

标签: data-structures ip-address trie patricia-trie radix-tree

我正在用C ++编写一个程序,需要以快速的方式查找和存储IP地址(所有IPv4)。每个IP地址都有一个与之关联的数据。如果它已存在于trie中,我打算将trie中IP地址的数据与新地址数据合并。如果它不存在,我打算将它添加为trie的新条目。删除IP地址不是必需的。

为了实现这一点,我需要设计一个Patricia Trie。但是,除此之外,我无法将设计可视化。这对我来说似乎很天真,但我想到的唯一想法是将IP地址更改为二进制形式,然后使用trie。然而,我对 HOW 完全无法实现这一点毫无头绪。

如果你能帮我解决这个问题,我真的很感激你。 请注意,我确实找到了类似的问题here。问题或更具体的答案超出了我的理解,因为CPAN网站上的代码对我来说不够清楚。

另请注意,我的数据格式如下

  

10.10.100.1:“汤姆”,“杰克”,“史密斯”

     

192.168.12.12:“琼斯”,“莉兹”

     

12.124.2.1:“吉米”,“乔治”

     

10.10.100.1:“迈克”,“哈利”,“詹妮弗”

2 个答案:

答案 0 :(得分:4)

我认为你指的是RadixTree。我在Java中有一个RadixTrie的实现,如果你想用它作为一个起点,它可以实现值映射的实际键。它使用PatriciaTrie作为其支持结构。

使用以下字符串的示例。

  1. 10.10.101.2
  2. 10.10.100.1
  3. 10.10.110.3
  4. Trie示例(未压缩)

    └── 1
        └── 0
            └── .
                └── 1
                    └── 0
                        └── .
                            └── 1
                                ├── 0
                                │   ├── 1
                                │   │   └── .
                                │   │       └── (2) 10.10.101.2
                                │   └── 0
                                │       └── .
                                │           └── (1) 10.10.100.1
                                └── 1
                                    └── 0
                                        └── .
                                            └── (3) 10.10.110.3
    

    Patricia Trie(压缩)

    └── [black] 10.10.1
        ├── [black] 0
        │   ├── [white] (0.1) 00.1
        │   └── [white] (1.2) 01.2
        └── [white] (10.3) 10.10.110.3
    

答案 1 :(得分:1)

Patricia尝试解决为给定IP地址找到最佳覆盖前缀的问题(路由器使用它们来快速确定192.168.0.0/16是192.168.14.63的最佳选择)。如果您只是尝试准确匹配IP地址,则哈希表是更好的选择。