有效地使用具有数组的KMP来计数单词频率计数

Effectively using KMP with array to count word frequency count

本文关键字:单词 频率计 KMP 数组 有效地      更新时间:2023-10-16

我想从文章中计数单词频率。

我的想法首先创建一个结构数组

 struct{
       char[WORD_SIZE]
 }data[MAX_WORD_NUMBER];

然后读取每个字符,然后通过

确定
isalpha();

然后通过

转换为小写
tolower();

然后将一个单词存储到每个结构。

然后使每个单词的失败功能

然后通过调用它来测试每个单词。

1.但是我不知道如何计算重复引起的频率。

(我以为我可以在阅读和插入一个单词时每次都可以进行比较,但是它是如此无效,是否有更有效的方法?)

2.我认为我的方法调用功能太多了。

如何更有效地使用KMP?

您正在用C或C 编程?您用两个标记了问题。

假设您正在使用C ,那么您将在std::map方面做得更好,以计算您的单词。像这样的东西

#include <map>
#include <string>
std::map<std::string, int> data;
std::string word;
data[word] = 0; // set word count to zero
data[word]++; // increment word count
// print out all the word counts
for (std::map<std::string, int>::iterator i = data.begin();
  i != data.end(); ++i)
{
  cout << "word " << i->first << " occurs " << i->second << "timesn";
}

如果您为作业选择正确的工具,那么此任务将是 SO 。当然,如果您在C中编程,那么这些都不会有帮助。

如果您打算在C中执行此操作,请像这样扩展结构:

struct {
    char[WORD_SIZE];
    int count;
} data[MAX_WORD_NUMBER];

然后,每当您在此结构数组中存储一个新单词时,也将相应的count设置为0。

然后,如果您发现一个单词已经在数组中,请增加相应的count

在程序结束时打印计数。