Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            var bm = new BoyerMooreSearch();

            string pattern = "Sonne"; // hier noch Problem, Alg. liefert bei Index 4 eine Null, laut Lösung aber eine 5
            string text    = "Sonnige Abschnitte im Schwarzwald, danach ziehen örtlich Gewitter auf und die Sonnenscheindauer beträgt ca. 5 Stunden";

            //string pattern = "Fest";
            //string text = "Ein Test als Fest.";
            //string pattern = "ABACABEF";
            //string text = "ABABACAABABABEFCABEFABACABEF";
            //string pattern = "FBBC";
            //string text = "ABABACAABABABEFCABEFABACABEF";
            //string pattern = "abbabab"; // hier noch ein Problem, liefert 1001010 nicht den Wert aus der Vorlesung
            //string text = "aabababacbaaaabdbabababbababbdbdbbababaababbabbababbbbaaabababcbaaababa";
            //string pattern = "001010101";
            //string text = "0101010101010101010101010101";

            Example(pattern, bm);
            //ExamplePreprocessing(pattern);


            bm.InitOcc(pattern);
            bm.Preprocessing(pattern);
            bm.Search(pattern, text);
        }
Ejemplo n.º 2
0
        public static void Example(string pattern, BoyerMooreSearch bm)
        {
            // Berechnung der Distanztabelle D nach Musteraufgaben
            var chars = pattern.ToCharArray();

            System.Console.Write("j");
            for (int i = 0; i < chars.Length; i++)
            {
                System.Console.Write("\t" + i);
            }
            System.Console.WriteLine();

            System.Console.Write("p[j]");
            for (int i = 0; i < chars.Length; i++)
            {
                System.Console.Write("\t" + chars[i]);
            }
            System.Console.WriteLine();

            System.Console.Write("occ()");
            var occ = new int[chars.Length];

            for (int i = 0; i < chars.Length; i++)
            {
                occ[i] = bm.GetOccurence(pattern, chars[i]);

                System.Console.Write("\t" + occ[i]);
            }
            System.Console.WriteLine();

            System.Console.Write("shift");
            var shift = new int[256];

            for (int i = 0; i < chars.Length; i++)
            {
                shift[i] = -1;
            }
            for (int i = 0; i < chars.Length; i++)
            {
                shift[chars[i]] = chars.Length - occ[i] - 1;
                System.Console.Write("\t" + shift[chars[i]]);
            }
            for (int i = 0; i < shift.Length; i++)
            {
                if (shift[i] == -1)
                {
                    shift[i] = pattern.Length;
                }
            }
        }