我正在用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:“迈克”,“哈利”,“詹妮弗”
答案 0 :(得分:4)
我认为你指的是RadixTree。我在Java中有一个RadixTrie的实现,如果你想用它作为一个起点,它可以实现值映射的实际键。它使用PatriciaTrie作为其支持结构。
使用以下字符串的示例。
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地址,则哈希表是更好的选择。