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); } } } } }
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; }