【发布时间】:2016-04-03 19:34:23
【问题描述】:
下图是我们数据结构课程的最后作业。
问题是编写一个DNS查找程序,使用注册的域名服务器将域映射到它们的IP地址。
我有一些想法,但我想知道这些是否是实施该程序的正确方法。
我想我可以使用哈希表来注册域名服务器。那么registerDNS 和deleteDNS 方法将是恒定时间。
对于注册 URL,再次使用哈希表。但这里困扰我的是他们提供了一个vector<string> &dnsChain,它提供了有关如何访问保存 URL 的 DNS 的信息。
现在registerURL 和deleteURL 也是恒定时间。但是我们在哈希表的每个单元格中都存储了一个向量,我认为这会增加空间复杂度。(如果你有一百万个 URL,每个单元格中有一个 dnsChain 和百万个元素呢?)
对于access 方法,我认为我们应该在DNS 哈希表中查找,以确保该URL 的dnsChain 中的每个DNS 都已注册。如果您在 dnsChain 中有 N 个域名服务器,则访问 O(N)。这可以接受吗?
还有一种合并两个 DNS 的合并方法。我的想法是在 DNS 哈希表的每个单元格中使用一个向量。如果我们将 DNS2 合并到 DNS1,那么我们可以将 DNS2 推到 DNS1 的向量中,这意味着 DNS1 也包含 DNS2。
可以降低空间复杂度吗?我们是否必须在 URL 哈希表的每个单元格中存储 dnsChain?
我们是否必须遍历dnsChain中的每个DNS才能访问一个URL?(如果10^6个DNS访问一个URL,会不会很慢?)
或者在这种情况下我可以使用任何其他辅助数据结构或技术(trie、可扩展哈希、BST)吗?
【问题讨论】:
-
如果不是那么开放和广泛,这可能是一个很好的 Programmers.SE 问题。
标签: c++ data-structures hash