/** * This is the "backscan-pruning" strategy described in the BIDE+ paper to avoid extending some * prefixs that are guaranteed to not generate a closed pattern (see the BIDE+ paper for details). * * @param prefix the current prefix * @param projectedContext the projected database * @return boolean true if we should not extend the prefix */ private boolean checkBackScanPruning( SequentialPattern prefix, List<PseudoSequenceBIDE> projectedContext) { // DEBUGGIN if (prefix.size() == 1 && prefix.get(0).get(0) == 5) { System.out.println("PREFIX 5 "); } // // See the BIDE+ paper for details about this method. // For the number of item occurences that can be generated with this prefix: for (int i = 0; i < prefix.getItemOccurencesTotalCount(); i++) { Set<Integer> alreadyVisitedSID = new HashSet<Integer>(); // Create a Map of pairs to count the support of items (represented by a pair) // in the ith semi-maximum periods Map<PairBIDE, PairBIDE> mapPaires = new HashMap<PairBIDE, PairBIDE>(); // SOME CODE USED BY "findAllFrequentPairsForBackwardExtensionCheck" Integer itemI = prefix.getIthItem(i); // iPeriod Integer itemIm1 = null; // iPeriod -1 if (i > 0) { itemIm1 = prefix.getIthItem(i - 1); } // // END NEW // (1) For each i, we build the list of maximum periods // for each sequence in the original database for (PseudoSequenceBIDE pseudoSequence : projectedContext) { int sequenceID = pseudoSequence.sequence.getId(); alreadyVisitedSID.add(pseudoSequence.sequence.getId()); Position currentCutPosition = new Position(pseudoSequence.firstItemset, pseudoSequence.firstItem); PseudoSequenceBIDE sequence = initialDatabase.get(sequenceID); PseudoSequenceBIDE period = sequence.getIthSemiMaximumPeriodOfAPrefix(prefix.getItemsets(), i, currentCutPosition); if (period != null) { // // we add it to the list of maximum periods boolean hasExtension = findAllFrequentPairsForBackwardExtensionCheck( prefix.getAbsoluteSupport(), prefix, period, i, mapPaires, itemI, itemIm1, currentCutPosition); if (hasExtension) { return true; } } } } return false; }
/** * This is the "backscan-pruning" strategy described in the BIDE+ paper to avoid extending some * prefixs that are guaranteed to not generate a closed pattern (see the BIDE+ paper for details). * * @param prefix the current prefix * @return boolean true if we should not extend the prefix */ private boolean checkBackScanPruning(SequentialPattern prefix, Set<Integer> sidset) { // // See the BIDE+ paper for details about this method. // For the number of item occurences that can be generated with this prefix: for (int i = 0; i < prefix.getItemOccurencesTotalCount(); i++) { Set<Integer> alreadyVisitedSID = new HashSet<Integer>(); // Create a Map of pairs to count the support of items (represented by a pair) // in the ith semi-maximum periods Map<PairBIDE, PairBIDE> mapPaires = new HashMap<PairBIDE, PairBIDE>(); // SOME CODE USED BY "findAllFrequentPairsForBackwardExtensionCheck" Integer itemI = prefix.getIthItem(i); // iPeriod Integer itemIm1 = null; // iPeriod -1 if (i > 0) { itemIm1 = prefix.getIthItem(i - 1); } // // END NEW int seqCount = 0; // int highestSupportUntilNow = -1; // (1) For each i, we build the list of maximum periods // for each sequence in the original database for (int sequenceID : sidset) { alreadyVisitedSID.add(sequenceID); PseudoSequenceBIDE sequence = initialDatabase.get(sequenceID); PseudoSequenceBIDE period = sequence.getIthSemiMaximumPeriodOfAPrefix(prefix.getItemsets(), i); if (period != null) { // // we add it to the list of maximum periods boolean hasExtension = findAllFrequentPairsForBackwardExtensionCheck( alreadyVisitedSID.size(), prefix, period, i, mapPaires, itemI, itemIm1); if (hasExtension) { return true; } } } } return false; }