예제 #1
0
        private static void GenerateBoundaryBits()
        {
            const int length    = 100000;
            const int runsCount = 100;

            using (var outputStream = File.Open(string.Format("D:\\statistics\\boundary_bits_{0}.txt", length), FileMode.Create))
                using (var output = new StreamWriter(outputStream))
                {
                    output.WriteLine("k | coeff");

                    var removeStrategy = new RemoveBorderStrategy();
                    var logger         = new ConsoleTextLengthLogger(length / 100);
                    var detectEqual    = false;

                    for (var k = 5; k <= 10; ++k)
                    {
                        Console.WriteLine("Conversion for k = {0}", k);
                        var text = new StringBuilder();

                        var e         = new RationalNumber(k, k - 1);
                        var generator = new CleverCharGenerator(text, k, e, detectEqual);
                        var detector  = new RepetitionDetector(text, e, detectEqual);

                        Calculate(runsCount, detector, length, removeStrategy, generator, logger, output);
                    }
                }
        }
        public void TestBoundaryLanguages(int k)
        {
            var lengthsBoundary = Enumerable.Range(1, 10).Select(n => n * 100).ToArray();
            var strategy        = new RemoveBorderStrategy();
            var e              = new RationalNumber(k, k - 1);
            var detector       = new RepetitionDetector(new StringBuilder(), e, false);
            var generator      = new RandomCharGenerator(k);
            var charsGenerated = 0;
            var times          = new List <long>();
            var coefs          = new List <double>();
            var sw             = Stopwatch.StartNew();

            foreach (var length in lengthsBoundary)
            {
                RandomWordGenerator.Generate(detector, length, strategy, generator);
                charsGenerated += RandomWordGenerator.Statistics.CharsGenerated;
                times.Add(sw.ElapsedMilliseconds);
                coefs.Add(charsGenerated * 1.0 / length);
            }
            sw.Stop();
            Console.WriteLine((string)"Alphabet size = {0}, e = {1}+", (object)k, (object)e);
            for (var i = 0; i < lengthsBoundary.Length; ++i)
            {
                Console.WriteLine("\tLength: {0}, Time: {1} ms, Conversion coeff: {2}", lengthsBoundary[i], times[i], coefs[i]);
            }
        }
        public void TestBacktrack()
        {
            var        text     = "acbaca";
            var        sb       = new StringBuilder();
            var        detector = new RepetitionDetector(sb, new RationalNumber(7, 4), true);
            Repetition rep;

            foreach (var c in text)
            {
                sb.Append(c);
                detector.TryDetect(out rep);
            }
            while (sb.Length > 3)
            {
                detector.Backtrack();
                sb.Remove(sb.Length - 1, 1);
            }
            var reps = new List <Repetition>();

            foreach (var c in "cab")
            {
                sb.Append(c);
                if (detector.TryDetect(out rep))
                {
                    reps.Add(rep);
                }
            }
            Assert.That(reps, Is.Empty);
        }
        public void TestDetectors()
        {
            var text = new StringBuilder();
            var e    = new RationalNumber(2);

            var detector1      = new RepetitionDetector(text, e, true);
            var detector2      = new SillyDetector(text, e, true);
            var removeStrategy = new RemoveBorderStrategy();
            var generator      = new RandomNotLastCharGenerator(text, 4);

            SyncronizedRandomWordGenerator.Generate(detector1, detector2, 1000, removeStrategy, generator, null);
        }
        private static Detector GetDetector(Type detectorType, bool detectEqual, RationalNumber e)
        {
            var      text = new StringBuilder();
            Detector detector;

            if (detectorType == typeof(SillyDetector))
            {
                detector = new SillyDetector(text, e, detectEqual);
            }
            else if (detectorType == typeof(RepetitionDetector))
            {
                detector = new RepetitionDetector(text, e, detectEqual);
            }
            else
            {
                throw new InvalidProgramStateException(string.Format("Wrong type of detector: {0}", detectorType.FullName));
            }
            return(detector);
        }
        public void Test(string text, int num, int denom, int lp, int p, bool detectEqual)
        {
            var e  = new RationalNumber(num, denom);
            var sb = new StringBuilder();

            var detector   = new RepetitionDetector(sb, e, detectEqual);
            var repetition = new Repetition(0, 0);

            foreach (var c in text)
            {
                sb.Append(c);
                if (detector.TryDetect(out repetition))
                {
                    break;
                }
            }

            Assert.That(repetition, Is.EqualTo(new Repetition(lp, p)));
        }
예제 #7
0
        private static void GenerateSquare()
        {
            var Runs    = new[] { 100 };
            var lengths = new[] { 100000 };

            using (var outputStream = File.Open("D:\\statistics\\square4.txt", FileMode.Create))
                using (var output = new StreamWriter(outputStream))
                {
                    for (var i = 0; i < Runs.Length; ++i)
                    {
                        var logger = new ConsoleTextLengthLogger(1000);
                        var text   = new StringBuilder();

                        var e              = new RationalNumber(2);
                        var generator      = new RandomNotLastCharGenerator(text, 4);
                        var detector       = new RepetitionDetector(text, e, true);
                        var removeStrategy = new RemoveBorderStrategy();

                        Calculate(Runs[i], detector, lengths[i], removeStrategy, generator, logger, output);
                    }
                }
        }
예제 #8
0
        private static void Generate3_7d4_plus()
        {
            using (var outputStream = File.Open("D:\\statistics\\binary_3_7d4+.txt", FileMode.Create))
                using (var output = new StreamWriter(outputStream))
                {
                    var Runs        = new[] { 100, 100, 100, 100, 100 };
                    var lengths     = new[] { 100, 200, 300, 400, 500 };
                    var e           = new RationalNumber(7, 4);
                    var detectEqual = false;

                    for (var i = 0; i < Runs.Length; ++i)
                    {
                        var length = lengths[i];
                        Console.WriteLine("Calculating conversion for length = {0}", length);
                        var text = new StringBuilder();

                        var generator      = new CleverCharGenerator(text, 3, e, detectEqual);
                        var detector       = new RepetitionDetector(text, e, detectEqual);
                        var removeStrategy = new RemoveBorderStrategy();

                        Calculate(Runs[i], detector, lengths[i], removeStrategy, generator, null, output);
                    }
                }
        }