【问题标题】:Data Structure to implement a Word Dictionary实现单词字典的数据结构
【发布时间】:2018-12-31 06:37:45
【问题描述】:

最近,我在一次采访中被问到关于数据结构的使用。 问题是:在创建英语词典时,我打算使用什么数据结构。字典将包含每个字母表下的单词数,每个单词都有 1 个含义。另外,我将如何实现数据结构来更新、搜索和选择不同的单词?

你们有什么建议吗?您提出建议的原因是什么?

【问题讨论】:

  • 我相信尝试将是显而易见的建议。 en.wikipedia.org/wiki/Trie#Dictionary_representation
  • 如果您需要做的只是查找和更新单词,那么哈希映射将是您的最佳选择。如果您还需要“查找所有以 x 开头的单词”的功能,那么我建议您尝试一下
  • trie 的内存效率非常低。
  • @YvesDaoust 怎么会这样?对于像字典一样大的数据集,trie 在各个方面都是有效的。此外,在字典中,我们查找单词的方式是逐个字符的,这种类型的搜索使用 trie 非常有效。
  • @vish4071:我说内存效率低。

标签: algorithm dictionary data-structures hashmap mapping


【解决方案1】:

哈希表将是实现具有更新、搜索和选择功能的字典的首选数据结构。

哈希表是一种可以存储键值对的数据结构。它本质上是一个包含所有要搜索的键的数组。散列函数 (h()) 用于计算数组的索引,其中可以插入或搜索元素。所以当需要插入时,会使用哈希函数来查找需要插入元素的位置。

在合理假设下的插入是 O(1)。每次我们插入数据,都需要 O(1) 时间来插入(假设哈希函数为 O(1) )。

查找数据也是类似的。如果我们需要找到一个单词x的含义,我们需要计算h(x),这将告诉我们 x 在哈希表中的位置。所以我们也可以在 O(1) 中查找单词(哈希值)。

但是,O(1) 插入和搜索并不总是成立。没有什么可以保证哈希函数不会为两个不同的输入产生相同的输出,因此会发生冲突。为了处理这种情况,可以采用各种策略,即分离链接开放寻址。但搜索/插入将不再是 O(1)

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多