Exemplo n.º 1
0
  /**
   * 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;
      }
    }
  }