c++ 统计英文文本中每个单词的词频并且按照词频对每行排序

博客介绍了作者在实现PPV算法过程中遇到的挑战,特别是统计单词词频和按词频排序的步骤。作者最初尝试使用map,后来转向Trie树实现,对于大规模数据,推荐使用map/reduce的wordCount函数。博客提供完整的PPV-GROWTH代码实现。
摘要由CSDN通过智能技术生成

 前几天写了Apriori算法之后效率很差,在网上查了很多资料,另外的最大模式挖掘算法一般有FP-Growth 和 Ecalt 算法,这两种效率比较高而FP-Growth算法构建FP-Tree的过程非常复杂,后来在网上找到了另外一种效率更优化且结构更简单的算法,那就是北大邓志鸿老师的PPV算法,看了论文以后觉得这确实是一个好的算法,因此打算加以实现。在实现的第一步就卡住了。在构造PPV-TREE/ FP-TREE 的第一步都是要统计每个事务的频度并且对项集中按照频度进行排序,虽然只是简单的两句话,可是当实现的时候就没有说的这么简单了。我也用了一天的时间来实现这第一步。。。。。确实有些事不动手不知道难。在如何实现的问题上也经过了很多的思考,最初打算用map 来实现,后来为了锻炼下就改用了Trie树的方式,如果数据大最好的方式应该是map/reduce的成名函数 wordCount。好了下面直接上代码.完整PPV-GROWTH代码

#ifndef TRIE_H
#define TRIE_H

#include <fstream>

class trie{
	
	public:
		trie(std::string fname,char spl):filename(fname), sp(spl),root(NULL){}
		~trie();
		void insert(std::string);
		int search(std::string);
		void openfile();
		std::string getFname();
		char getsp();
	private:
		struct node{
			char key;
			int count;
			node();
			node *child[26];
		};
		node *root;
		std::ifstream in;
		std::string filename;
		char sp;
};
#endif //end tire define


#include <iostream>
#include <cassert>
#include "trie.h"

using namespace std;

trie::node::node()
{
	count = 0;
	for(int i = 0; i<26; ++i)
		child[i] = NULL;
}


trie::~trie()
{
	if(in)
		in.close();
	delete root;
}

void trie::openfile()
{
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值