コード例 #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);
				}
			}
		}
	}
}