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))); }
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); } } }
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); } } }