Data structures 计算大型文档中每个单词的出现次数

Data structures 计算大型文档中每个单词的出现次数,data-structures,Data Structures,我想知道如何使用哪种数据结构来解决这个问题。。有人能详细解释一下吗。。。!!我在考虑用这棵树 有一个大文档。它包含数百万个单词。那么,您将如何以最佳方式计算每个单词的出现次数? 这个问题是在Microsoft中提出的。。。如有任何建议,我们将不胜感激 我只需要使用字符串到整数的哈希映射(或字典,因为这是Microsoft;))。对于输入的每个单词,如果是新单词,则将其添加到字典中,否则增加其计数。O(n)在输入长度上,假设哈希映射实现是合适的。我只会使用字符串到整数的哈希映射(或字典,因为这是M

我想知道如何使用哪种数据结构来解决这个问题。。有人能详细解释一下吗。。。!!我在考虑用这棵树

有一个大文档。它包含数百万个单词。那么,您将如何以最佳方式计算每个单词的出现次数?

这个问题是在Microsoft中提出的。。。如有任何建议,我们将不胜感激

我只需要使用字符串到整数的哈希映射(或字典,因为这是Microsoft;))。对于输入的每个单词,如果是新单词,则将其添加到字典中,否则增加其计数。O(n)在输入长度上,假设哈希映射实现是合适的。

我只会使用字符串到整数的哈希映射(或字典,因为这是Microsoft;)。对于输入的每个单词,如果是新单词,则将其添加到字典中,否则增加其计数。O(n)在输入长度上,假设哈希映射实现是适当的。

class IntValue
{
公共int值(int值)
{
价值=价值;
}
公共价值观;
}
静态void Main(字符串[]参数)
{
//假设document是文档中单词的枚举器:
Dictionary dict=新字典();
foreach(文档中的字符串字)
{
IntValue IntValue;
如果(!dict.TryGetValue(word,out intValue))
{
intValue=新的intValue(0);
dict.Add(word,intValue);
}
++intValue.Value;
}
//现在dict包含了计数
}
类IntValue
{
公共int值(int值)
{
价值=价值;
}
公共价值观;
}
静态void Main(字符串[]参数)
{
//假设document是文档中单词的枚举器:
Dictionary dict=新字典();
foreach(文档中的字符串字)
{
IntValue IntValue;
如果(!dict.TryGetValue(word,out intValue))
{
intValue=新的intValue(0);
dict.Add(word,intValue);
}
++intValue.Value;
}
//现在dict包含了计数
}

树在这里不起作用

Hashtable ht=newhashtable();
//按顺序阅读课文中的每个单词:
如果(ht.包含(一个字))
{
整数I=(整数)ht.get(一个字));
ht.put(一个字,新整数(I.intValue()+1));
}
其他的
{
ht.put(一个字,新整数(1));
}

树在这里不起作用

Hashtable ht=newhashtable();
//按顺序阅读课文中的每个单词:
如果(ht.包含(一个字))
{
整数I=(整数)ht.get(一个字));
ht.put(一个字,新整数(I.intValue()+1));
}
其他的
{
ht.put(一个字,新整数(1));
}

使用字典或散列集将平均导致o(n)

要在o(n)最坏情况下解决此问题,应使用带有小变化的a: 为trie中的每个单词表示添加一个计数器;每次插入的字已经存在时,递增其计数器


如果要在最后打印所有金额,可以将计数器保留在不同的列表中,并从trie中引用它,而不是将计数器存储在trie中。

使用字典或哈希集将平均导致o(n)

要在o(n)最坏情况下解决此问题,应使用带有小变化的a: 为trie中的每个单词表示添加一个计数器;每次插入的字已经存在时,递增其计数器

如果要打印最后的所有金额,可以将计数器保留在不同的列表中,并从trie中引用它,而不是将计数器存储在trie中