DNS查找,哈希表

时间:2015-12-29 21:10:56

标签: c++ data-structures hash

下图是我们数据结构课程的最终作业。

问题是编写DNS查找程序,使用注册的域名服务器将域映射到其IP地址。

我有一些想法,但我想知道这些是否是实施该计划的正确方法。

我以为我可以使用哈希表来注册域名服务器。然后,registerDNSdeleteDNS方法常量时间

为了注册URL,再次使用哈希表。但是困扰我的是他们提供了一个vector<string> &dnsChain,它提供了有关如何转到包含URL的DNS的信息。

现在registerURLdeleteURL 常量时间。但是我们在哈希表的每个单元格中存储了一个向量,我相信这会增加空间复杂度。(如果你有一个百万个URL,每个单元格中有一个dnsChain百万个元素怎么办? ?)

对于access方法,我认为我们应该在DNS哈希表中查找以确保该URL的dnsChain中的每个DNS都已注册。如果您在dnsChain中有N个域名服务器,则会访问 O(N)。这可以接受吗?

此外,还有一种合并两个DNS的合并方法。我的想法是在DNS哈希表的每个单元格中使用向量。如果我们将DNS2合并到DNS1,那么我们可以将DNS2推送到DNS1的向量,这意味着DNS1也包含DNS2。

愿空间复杂度降低吗?我们是否必须在URL哈希表的每个单元格中存储dnsChain

我们是否必须遍历dnsChain中的每个DNS才能访问网址?(如果使用10 ^ 6 DNS来访问网址,那么它会不会很慢?)

或者在这种情况下我可以使用其他任何辅助数据结构或技术(trie,extendible hashing,BST)吗?

dns manager

1 个答案:

答案 0 :(得分:1)

由于这是家庭作业,我只会给出一些非常高级别的建议。

考虑到许多dnsChains有重复的URL,我建议将dnsChains存储在树中,如果链条有很多重复并且很长,那么这可能会节省大量的空间。需要注意的一点是,树木必须包含添加/删除的次数,并且只有在计数达到0时才应删除。

这里可以用来加速访问功能的整洁数据结构是布隆过滤器。这是概率性的,但偶尔会给出误报,但绝不会出现假阴性。这些也用于工业中以加速缓存。可以找到更多信息here