/** * This methods checks if a seq. pattern "pattern2" is strictly contained in a seq. pattern * "pattern1". * * @param pattern1 a sequential pattern * @param pattern2 another sequential pattern * @return true if the pattern1 contains pattern2. */ boolean strictlyContains(PrefixVMSP pattern1, PrefixVMSP pattern2) { // // if pattern2 is larger or equal in size, then it cannot be contained in pattern1 // if(pattern1.size() <= pattern2.size()){ // return false; // } // To see if pattern2 is strictly contained in pattern1, // we will search for each itemset i of pattern2 in pattern1 by advancing // in pattern 1 one itemset at a time. int i = 0; // position in pattern2 int j = 0; // position in pattern1 while (true) { // if the itemset at current position in pattern1 contains the itemset // at current position in pattern2 if (pattern1.get(j).containsAll(pattern2.get(i))) { // go to next itemset in pattern2 i++; // if we reached the end of pattern2, then return true if (i == pattern2.size()) { return true; } } // go to next itemset in pattern1 j++; // if we reached the end of pattern1, then pattern2 is not strictly included // in it, and return false if (j >= pattern1.size()) { return false; } // // lastly, for optimization, we check how many itemsets are left to be matched. // // if there is less itemsets left in pattern1 than in pattern2, then it will // // be impossible to get a total match, and so we return false. if ((pattern1.size() - j) < pattern2.size() - i) { return false; } } }