Example #1
0
        private void Traversal(PatternTree xPattern, int yIndex, IList <PatternTree> group, Depth depth)
        {
            var pX = xPattern;
            var pY = group[yIndex];

            var childPreStr = pX.CombinePreorderRepresentation(pY).ToPreorderString(MiningParams.Separator);

            PatternTree child = null;

            if (PatternsExtended.AlreadyExtended(childPreStr))
            {
                child = PatternsFrequent.GetPatternAtDepth(childPreStr, depth);
            }
            else if (pX.HasNewCombineOccurrenceAtDepth(pY, depth))
            {
                child = Combine2Patterns(pX, pY, depth);
            }

            if (child == null)
            {
                return;
            }

            for (var i = 0; i < group.Count; i++)
            {
                Traversal(child, i, group, depth);
            }
        }
Example #2
0
        protected override void Connect(Depth depth)
        {
            var f2Di = PatternsFrequent.GetConnectableAtDepth(depth);
            var fDj  = PatternsFrequent.GetToBeConnectableAtDepth(depth + 1);

            foreach (var f2 in f2Di)
            {
                var toBeConnected = SelectPatternsOfSameRoot(f2.SecondSymbol, fDj, depth + 1);

                foreach (var fpt in toBeConnected)
                {
                    var childPreStr = f2.ConnectPreorderRepresentation(fpt).ToPreorderString(MiningParams.Separator);

                    if (PatternsExtended.AlreadyExtended(childPreStr))
                    {
                        continue;
                    }
                    if (!f2.HasNewConnectOccurrenceAtDepth(fpt, depth))
                    {
                        continue;
                    }

                    ConnectTwoPatterns(f2, fpt, depth);
                }
            }

            if (MiningParams.MineClosed)
            {
                DetermineClosed(depth);
            }
            if (MiningParams.MineMaximal)
            {
                DetermineMaximal(depth);
            }

            Pruner.PruneAfterConnection(PatternsFrequent, MiningParams, depth);
        }