private void Bide()
        {
            _allSequentialPatterns.Clear();

            ProjectedDatabase projectedDatabase = _sequenceDatabase.ConvertToProjectedDatabase();

            // Divides the search space according to frequent items and mine each recursively.
            for (int i = 0; i < _1LengthSequentialPatterns.Count; ++i)
            {
                ProjectedDatabase freqItemProjectedDb = ConstructProjectedDatabase(_1LengthSequentialPatterns[i], projectedDatabase);

                if (freqItemProjectedDb == null || !freqItemProjectedDb.IsNotEmpty)
                {
                    continue;
                }

                if (ClosureChecker.BackScan(freqItemProjectedDb))
                {
                    PrunedSequencesCount++;
                }
                else
                {
                    Bide(freqItemProjectedDb);
                }
            }
        }
        private void PrefixSpan()
        {
            _allSequentialPatterns.Clear();

            ProjectedDatabase projectedDatabase = _sequenceDatabase.ConvertToProjectedDatabase();

            // Divides the search space according to frequent items and mine each recursively.
            for (int i = 0; i < _1LengthSequentialPatterns.Count; ++i)
            {
                Sequence seqPattern = _1LengthSequentialPatterns[i];

                _allSequentialPatterns.Add(seqPattern);

                LogPattern(seqPattern);

                ProjectedDatabase freqItemProjectedDb = ConstructProjectedDatabase(seqPattern, projectedDatabase);

                if (freqItemProjectedDb == null || !freqItemProjectedDb.IsNotEmpty)
                {
                    continue;
                }

                PrefixSpan(freqItemProjectedDb);
            }
        }