コード例 #1
0
ファイル: GLCM.cpp プロジェクト: thacdtd/PGLCM
void GLCM::GLCMloop(ItemSet P, BinaryMatrix& res, vector< vector< pair<int,int> > > G1Item, const vector<BinaryMatrix *> & vBM, string freType, string so , std::ostream &output, int & resFre, bool printTSsFlag)
{	
	if ((P.size() != 0) && (resFre < _threshold))
	{
		return;
	}
	if (P.size() != 0)
	{
		if (resFre != G1Item[0].size()){
			dumpItemset(output,P,resFre);
			nbIS++;
			if (printTSsFlag){
				list<TransactionSequence> TSl;
				TSl.clear();
				TSl = buildTSList(res);
				dumpTSs(output,TSl);
			}
		}
	}


	int k = 0;
	int core_i = -1;
	if (P.size() != 0) core_i = P.getCore_i();

	if ((core_i % 2 != 0) || core_i == -1) k = core_i;
	else k = core_i + 1;
	
    BinaryMatrix calGBM(vBM[0]->getSize());
	int G1ItemSize = G1Item.size();
	for (int i = k + 1; i < G1ItemSize; i++)
	{
		ItemSet P1 = P.addItemwCore_i(i);
		if (P != P1)
		{
			calGBM = (*vBM[i]);
			if (res.getSize() != 0)
				calGBM &= res;
			int resourceFre = 0;
			ItemSet Q = calF(&calGBM,G1Item,vBM,freType,resourceFre);
			if (Q.size() != 0)
			{
				Q.setCore_i(P1.getCore_i());
				if (Q.prefixEqual(P1))
				{
					GLCMloop(Q, calGBM, G1Item, vBM, freType, so, output, resourceFre, printTSsFlag);
				}
			}
		}
	}
}
コード例 #2
0
ファイル: GLCM.cpp プロジェクト: thacdtd/PGLCM
void GLCM::GLCMAlgo( DBMain * DB, float threshold, string freType,string so, std::ostream &output)
{
    TimeTracker tt1;
    tt1.Start();
	nbIS = 0;
	ItemSet P = ItemSet();
	P.clear();
	ClosedItemSetList.clear();
	BinaryMatrixList.clear();
	vector< vector< pair<int,int> > > G1Item = buildG_1item(DB);
	cout << "There are " << G1Item[0].size() << " customers, and " <<  G1Item.size()/2 << " attributes." << endl << endl;
	if ((freType == "nor") || (freType == "norwTSs"))
	{
		_threshold = (int) ceil(threshold * G1Item[0].size());
	}
	else if (freType == "gra")
	{
		_threshold = (int) ceil(((threshold * G1Item[0].size() * (G1Item[0].size() - 1)))/2);
	}
	vector<BinaryMatrix *> vBM = constructBinaryMatrixAll(G1Item);
	BinaryMatrix BM = BinaryMatrix();
	cout << "Begin GLCM" << endl;
	int G1ItemSized2 = G1Item.size()/2;
	for (int i = 0; i < G1ItemSized2; i++)
	{
		cout << "Item Sets start with: " << i + 1 << "+" << endl;
		ItemSet P1 = P.addItemwCore_i(i*2);
		BM = (*vBM[i*2]);

		int resFre = 0;
		int BMSize = BM.getSize();
		BinaryMatrix * calFBM = new BinaryMatrix(BMSize);
		calFBM->setContrastTo0(BM);
		if (freType == "gra")
			resFre = calFBM->getActive();
		else {
			vector<int> freMap;
			freMap.clear();
			for (int i = 0; i < BMSize; i++)
			{
				freMap.push_back(-1);
			}
			loop_Chk_Freq(calFBM,freMap);
			resFre = frequentCount(freMap);
		}
		delete calFBM;
		bool printTSsFlag = false;
		if (freType == "norwTSs") printTSsFlag = true;
		GLCMloop(P1, BM, G1Item, vBM, freType, so, output, resFre, printTSsFlag);
	}
	double ts1 = tt1.Stop();
	cout << endl << "Execution took " << setw(5) << ts1 << " sec" << endl;

	vector<BinaryMatrix*>::const_iterator posVBM ;
	for (posVBM = vBM.begin() ; posVBM != vBM.end() ; ++posVBM)
	  delete *posVBM ;
	  vBM.clear() ;

	ostringstream ost1;
	ost1 << getpid ();
	string cmd1="ps -p "+ost1.str ()+" -o rss";
	cout << "Execution Memory usage : " << endl;
	//system(cmd1.c_str());
	cout << endl;
}