Algorithm 查找文档中每个单词的出现次数?

Algorithm 查找文档中每个单词的出现次数?,algorithm,Algorithm,我在一次采访中被问到这个问题。面试官让我假设存在一个函数,比如getNextWord()来返回给定文档中的下一个单词。我的任务是设计一个数据结构来实现这个任务,并给出一个算法来构建一个包含所有单词及其频率的列表 然后插入所有单词,然后显示它的计数>代码>。然而,后来有人告诉我,要用一种更通用的方式来做这件事。泛型的意思是他不想让我使用库功能。此外,我猜多重映射在内部实现为2-3树左右,因此为了使多重映射解决方案具有通用性,我还需要对2-3树进行编码 虽然我确实想到了尝试,但在面试中实施一个对我来

我在一次采访中被问到这个问题。面试官让我假设存在一个函数,比如getNextWord()来返回给定文档中的下一个单词。我的任务是设计一个数据结构来实现这个任务,并给出一个算法来构建一个包含所有单词及其频率的列表

<从C++背景中,我的答案是创建<代码> MultIMAP <代码>字符串 >然后插入所有单词,然后显示它的<代码>计数>代码>。然而,后来有人告诉我,要用一种更通用的方式来做这件事。泛型的意思是他不想让我使用库功能。此外,我猜多重映射在内部实现为2-3树左右,因此为了使多重映射解决方案具有通用性,我还需要对2-3树进行编码

虽然我确实想到了尝试,但在面试中实施一个对我来说是不可能的。所以,我只是想知道是否有更好的方法来实现它?或者有没有一种方法可以使用trys以平滑的方式实现它?

我会尝试实现一个(或smth非常类似)来存储所有单词。因此,我可以很容易地找到下一个单词(如果已经有了),并增加节点中的关联计数器。或者只是插入一个新的

在这种情况下,时间复杂度是:
O(nlogn)
,其中
n
是所有单词的计数,
logn
是此类树的一个大Oh

我会尝试实现一个(或类似的smth)来存储所有单词。因此,我可以很容易地找到下一个单词(如果已经有了),并增加节点中的关联计数器。或者只是插入一个新的

在这种情况下,时间复杂度是:
O(nlogn)
,其中
n
是所有单词的计数,
logn
是此类树的一个大Oh

在这里,任何基于的算法都是有效和通用的。想法很简单:从数据中建立一个直方图直方图的通用界面是
地图

在保持直方图的同时(使用nextDoc()方法)迭代文档一次

这个接口的最佳实现,就大O符号而言,可能是使用一个,并在每个叶节点中添加发生计数器

从trie中获取实际的
(字、数)
对将由trie上的一个简单DFS完成

此解决方案为您提供了
O(n*| S |)
时间复杂度,其中| S |是字符串的平均大小

每个单词的插入算法:
每次添加新词时:检查它是否已经存在,如果已经存在-增加计数器,否则-将该词添加到字典中,计数器值为1。

在这里,任何基于算法的算法都是有效和通用的。想法很简单:从数据中建立一个直方图直方图的通用界面是
地图

在保持直方图的同时(使用nextDoc()方法)迭代文档一次

这个接口的最佳实现,就大O符号而言,可能是使用一个,并在每个叶节点中添加发生计数器

从trie中获取实际的
(字、数)
对将由trie上的一个简单DFS完成

此解决方案为您提供了
O(n*| S |)
时间复杂度,其中| S |是字符串的平均大小

每个单词的插入算法:

每次添加一个新词:检查它是否已经存在,如果已经存在-增加计数器,否则-将该词添加到字典中,计数器值为1。

我认为最简单的解决方案是a。在这种情况下给出O(N)(用于插入和获取计数)。只需将计数存储在每个节点的附加空间中

基本上,树中的每个节点都包含26个链接,指向26个可能的子节点(每个字母1个)+1个计数器(用于在当前节点中终止的单词) .
只需查看trie的图形图像链接。

我认为最简单的解决方案是a。在这种情况下给出O(N)(用于插入和获取计数)。只需将计数存储在每个节点的附加空间中

基本上,树中的每个节点都包含26个链接,指向26个可能的子节点(每个字母1个)+1个计数器(用于在当前节点中终止的单词) .
只需查看trie的图形图像链接。

您能不能扩展到通用?通用的意思是说,他不想让我使用库功能。另外,我猜想MultuMAP是作为2-3树在内部实现的。一般来说,他希望我对2-3棵树编码。我猜他希望你描述你正在使用的数据结构,或者他可能希望你做一个伪代码而不是C++实现。你可以扩展泛型吗?他用泛型来说明,他不想让我使用库功能。此外,我猜多重映射在内部实现为2-3树左右。通过泛型,他想让我对2-3树进行编码。我猜他想让你描述你正在使用的数据结构,例如,他可能希望你做一个伪代码而不是C++实现。这个SENS不是比使用MultAPAPE更通用,也不需要O(log n)因子。Hashmap或trie更好更快。在这种情况下可能是通用的意味着smth不是标准的数据结构实现?因为我们在C++:std、C#:Generic中自然地有map、hash和其他。我相信,面试官只是想让应聘者听到的不是著名的algo实现,而是经典的方法(比如树)。@usamec。Hashmap有
O(1+n/k)
case用于搜索。是的,您也可以为此使用任何类型的哈希表。我不介意:)请注意,两个字符串的每个比较运算都是
O(| S |)
——其中
|S |
是stri的平均大小