Exemplo n.º 1
0
        private void Run(IEquatable <char>[][] sentences, IEquatable <char>[][] words, IMatcher <char> matcher, MatchingSummary summary)
        {
            var shifts      = new List <int>();
            var comparisons = new int[sentences.Length * words.Length];

            for (int wI = 0; wI < words.Length; wI++)
            {
                matcher.Init(words[wI]);
                for (int sI = 0; sI < sentences.Length; sI++)
                {
                    int steps = 0;
                    matcher.Start(sentences[sI]);

                    for (var step = matcher.Step(); !step.IsFinished; step = matcher.Step())
                    {
                        steps++;

                        if (!step.Matched)
                        {
                            shifts.Add(step.Shift.I - step.I);
                        }
                    }

                    comparisons[wI * sentences.Length + sI] = steps;
                }
            }

            summary.AvgShiftLength = shifts.Average();
            summary.AvgSteps       = comparisons.Average();
        }
Exemplo n.º 2
0
        private void GetMatcherResponse(IEquatable <char>[][] sentences, IEquatable <char>[][] words, MatchingSummary summary)
        {
            IMatcher <char> matcher;

            switch (summary.Matcher)
            {
            case Matcher.KMP:
                matcher = new KnuthMorrisPrattMatcher <char>();
                break;

            case Matcher.BMH:
                matcher = new BoyerMooreHorspoolMatcher <char>();
                break;

            case Matcher.BMHS:
                matcher = new BoyerMooreHorspoolSundayMatcher <char>();
                break;

            case Matcher.BM:
                matcher = new BoyerMooreMatcher <char>(new BadCharacterRule <char>());
                break;

            default:
                matcher = new NaiveMatcher <char>();
                break;
            }

            Run(sentences, words, matcher, summary);
        }