private void bide(ProjectedDatabase projectedDatabase, TaskMonitor monitor) {
		TreeSet<FrequentSequenceItem> locallyFrequentItems =
			projectedDatabase.getLocallyFrequentItems(globallyFrequentItems, minSupport);
		Set<FrequentSequenceItem> forwardExtensionItems =
			projectedDatabase.getForwardExtensionItems(locallyFrequentItems);
		if (forwardExtensionItems.size() == 0) {
			frequentClosedSequences.add(new FrequentSequence(projectedDatabase.getPrefix(),
				projectedDatabase.getSupport()));
		}
		for (FrequentSequenceItem fItem : locallyFrequentItems) {
			if (monitor.isCancelled()) {
				return;
			}
			ProjectedDatabase extended = new ProjectedDatabase(projectedDatabase, fItem.getItem());
			Set<FrequentSequenceItem> backwardExtensionItems = extended.getBackwardExtensionItems();
			if (backwardExtensionItems.size() == 0) {
				bide(extended, monitor);
			}
		}
	}
"bide" is short for "BiDirectional Extension", the name of the algorithm
in the paper by Wang & Han
@param projectedDatabase
@param monitor
Ghidra/Features/BytePatterns/src/main/java/ghidra/closedpatternmining/ClosedSequenceMiner.java