Data structures Patricia Trie用于快速检索IPv4地址和卫星数据 我正在编写一个C++程序,它需要快速查找和存储IP地址(所有IPv4)。每个IP地址都有一个与其关联的数据。如果它已经存在于trie中,我打算将trie中的IP地址数据与新地址数据合并。如果不存在,我打算将其作为新条目添加到trie中。不需要删除IP地址

Data structures Patricia Trie用于快速检索IPv4地址和卫星数据 我正在编写一个C++程序,它需要快速查找和存储IP地址(所有IPv4)。每个IP地址都有一个与其关联的数据。如果它已经存在于trie中,我打算将trie中的IP地址数据与新地址数据合并。如果不存在,我打算将其作为新条目添加到trie中。不需要删除IP地址,data-structures,ip-address,trie,patricia-trie,radix-tree,Data Structures,Ip Address,Trie,Patricia Trie,Radix Tree,为了实现这一点,我需要设计一个Patricia Trie。然而,我无法想象超出此范围的设计。我似乎很天真,但我想到的唯一想法是将IP地址更改为二进制形式,然后使用trie。然而,我对如何具体实施这一点一无所知 如果你能帮我做这件事,我将非常感谢你。 请注意,我确实发现了一个类似的问题。这个问题或者更具体地说,答案超出了我的理解范围,因为CPAN网站上的代码对我来说不够清楚 另外请注意,我的数据格式如下 10.10.100.1:“汤姆”、“杰克”、“史密斯” 192.168.12.12:“琼斯”、

为了实现这一点,我需要设计一个Patricia Trie。然而,我无法想象超出此范围的设计。我似乎很天真,但我想到的唯一想法是将IP地址更改为二进制形式,然后使用trie。然而,我对如何具体实施这一点一无所知

如果你能帮我做这件事,我将非常感谢你。 请注意,我确实发现了一个类似的问题。这个问题或者更具体地说,答案超出了我的理解范围,因为CPAN网站上的代码对我来说不够清楚

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

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

192.168.12.12:“琼斯”、“利兹”

12.124.2.1:“吉米”、“乔治”

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


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

我认为您指的是一个。我有一个Java中a的实现,如果您想将其作为起点,它将执行实际的键到值映射。它使用a作为其支持结构

使用以下字符串的示例

  • 10.10.101.2
  • 10.10.100.1
  • 10.10.110.3
  • Trie示例(未压缩)

    Patricia Trie(压缩)


    有多少(如果几百万:使用哈希表)如果有帮助的话,我已经添加了一个例子。我很难理解你对PATRICIA的解释。我读过的参考文献(Knuth、Sedgewick和)似乎都暗示“Patricia创建了一个二叉树,每个字符串存储一个节点”,但在我看来,似乎您的Patricia为每个存储的字符串创建了多个节点…@Seb我假设它们指的是Patricia Trie的压缩版本(如上面第二个示例所示)。话虽如此,帕特里夏·崔(Patricia Trie)的定义似乎有点过载。我写的版本和这里的解释如下:请不要搞错,我读过克努特和塞吉威克关于这个主题的书,我完全理解他们的解释。我还有一本“PATRICIA——检索字母数字编码信息的实用算法”,从历史上讲,这是D.R.Morrison编写的PATRICIA的权威定义,并提交给ACM杂志。您的图表使用五个节点来存储三个字符串;根据莫里森的说法,“推论表明,随着图书馆的发展,每一个新的目的都会带来一个新的分支”。。。重点是我的。如果你想知道一棵帕特里夏树是什么样子的,那是我的。您的图表看起来像其他类型的基数trie。@Seb我认为您在争论实现。它可以使用二进制基数树、DAG或许多其他方法实现。如果你看一下塞德威克在普林斯顿时的幻灯片,他的图表和上面的例子一模一样。第51页他还提到帕特里夏树“也被称为:crit比特树,基数树”
    └── 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
    
    └── [black] 10.10.1
        ├── [black] 0
        │   ├── [white] (0.1) 00.1
        │   └── [white] (1.2) 01.2
        └── [white] (10.3) 10.10.110.3